首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

hdu 1507 Uncle Tom's Inherited Land

2012-10-07 
hdu 1507 Uncle Toms Inherited Land*Uncle Toms Inherited Land* Time Limit : 2000/1000ms (Java/Othe

hdu 1507 Uncle Tom's Inherited Land*

Uncle Tom's Inherited Land*

Time Limit : 2000/1000ms (Java/Other)???Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 4???Accepted Submission(s) : 2
Special Judge

?

#include <iostream>#include <stdio.h>#include <memory.h>using namespace std;const int N = 105;int pre[N*N], map[N*N];bool flag[N*N], vis[N*N];int n, m, total;int find(int cur){ int k; k = cur + 1; if(cur%m+1 < m && k < total && map[k] != -1 && !flag[k]) { flag[k] = true; if(pre[k] == -1 || find(pre[k])) { pre[k] = cur; return 1; } } k = cur + m; if(k < total && map[k] != -1 && !flag[k]) { flag[k] = true; if(pre[k] == -1 || find(pre[k])) { pre[k] = cur; return 1; } } k = cur - 1; if(cur%m > 0 && k >= 0 && map[k] != -1 && !flag[k]) { flag[k] = true; if(pre[k] == -1 || find(pre[k])) { pre[k] = cur; return 1; } } k = cur - m; if(k >= 0 && map[k] != -1 && !flag[k]) { flag[k] = true; if(pre[k] == -1 || find(pre[k])) { pre[k] = cur; return 1; } } return 0;}int main(){ int i, k, t, x, y, sum; while(scanf("%d %d", &n, &m), n && m) { total = n * m; memset(vis, false, sizeof(vis)); memset(map, -1, sizeof(map)); memset(pre, -1, sizeof(pre)); for(i = 0; i < total; i++) { map[i] = i; } scanf("%d", &t); while(t--) { scanf("%d %d", &x, &y); k = (x-1)*m + (y-1); map[k] = -1; } sum = 0; for(i = 0; i < total; i++) { if(map[i] != -1) { memset(flag, false, sizeof(flag)); sum += find(map[i]); } } printf("%d\n", sum/2); for(i = 0; i < total; i++) { if(map[i] != -1 && pre[i] != -1 && !vis[pre[i]] && !vis[i]) { vis[pre[i]] = vis[i] = true; printf("(%d,%d)--(%d,%d)\n", i/m+1, i%m+1, pre[i]/m+1, pre[i]%m+1); } } printf("\n"); } return 0;}?

热点排行