zoj2100(DFS)
2011-04-24 00:22
267 查看
这个题呀,题意很简单,能把所有的地种完就是胜利
令我纠结的是回溯的问题,这个一直不是很明白是怎么执行的,还是自己比较水呀。。。
dfs(-1,0,0);中不能从(0,0)开始,高手云:这样不能保证从(0,0)开始回溯
令我纠结的是回溯的问题,这个一直不是很明白是怎么执行的,还是自己比较水呀。。。
dfs(-1,0,0);中不能从(0,0)开始,高手云:这样不能保证从(0,0)开始回溯
]#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <string.h> int N,K,num,fienum ; int visit[10][10]; char field[10][10]; int dir[4][2] = {{0,1},{0,-1},{-1,0},{1,0}}; void dfs(int x,int y) { int xx,yy,i; for(i = 0;i < 4;i++) { xx = x + dir[i][0]; yy = y + dir[i][1]; if(xx >= 0 && xx < N && yy >= 0 && yy < K) { if(!visit[xx][yy] && field[xx][yy] != 'S') { num ++; visit[xx][yy] = 1; dfs(xx,yy); if((fienum + num) == (N * K)) return ; visit[xx][yy] = 0; num --; } } } } int main() { int i ,j ; while(scanf("%d%d",&N,&K) && N + K) { for(i = 0;i < N;i++) scanf("%s",field[i]); getchar(); num = 0; memset(visit,0,sizeof(visit)); fienum = 0; for(i = 0;i < N;i++) for(j = 0;j < K;j++) if(field[i][j] == 'S') fienum ++; dfs(0,0); /*printf("%d %d ",fienum,num);*/ if((num + fienum) == (N * K)) printf("YES/n"); else printf("NO/n"); } return 0; }2011-04-24 00:20:09
相关文章推荐
- ZOJ 题目2100 Seeding(DFS)
- zoj2100 Seeding (DFS递归+回溯)
- ZOJ 2100--Seeding【DFS】
- zoj 2100 dfs暴力宽搜
- zoj 2100 dfs
- ZOJ Problem Set - 2100 (DFS)
- zoj 2100 Seeding(DFS水水~)
- zoj 2100 DFS
- ZOJ2100题解这是我整整意义上的第一道DFS题能做出来我很开心,和上题一样,方法思路大体相同,不过不需要剪枝。
- zoj 2100 seeding(dfs)
- zoj 2100 水dfs
- zoj 2100(dfs深度优先遍历)
- (DFS)ZOJ 2100 Seeding
- !ZOJ 2100--DFS(递归结束条件和回溯还是没理解好)
- ZOJ 2100 seeding 【DFS】
- zoj 2100 Seeding(dfs)
- ZOJ 2100 Seeding(简单DFS)
- zoj 2100 Seeding 【DFS 判断是否能经过每个点一次遍历完整个图】
- poj 1562 || zoj 1709 Oil Deposits(DFS)
- poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)