ZOJ 2100 seed
2015-04-04 21:25
141 查看
挺简单的深搜题。。但是因为粗心,跑完一个test case后没有正确地更新field数组(开始时为求精简竟然在格子(i,j)为 false时不令field[i][j] = false,原因是我以为field[6][6]是全局变量,默认情况是初始化为false,所以想当然地以为如果格子(i,j)是false就不用多次一举。。可是我忘了每次运行一个test case后field会改的。。SB了
#include<iostream> #include<fstream> #include<cstring> //#include "debug.h" using namespace std; bool field[6][6]; //有石头则为true,无石头则为false bool seed[6][6]; //已经播种则为true,否则为false int n,m; //bool res; int k = 0; //已经播种的格子数 int total_seed = 0; //可播种格子总数 bool res; void dfs(int r,int c){ if(res) return; if(k == total_seed){ res = true; return;} if(seed[r][c] == true || field[r][c] == true) return; //有石头或已播种 seed[r][c] = true; ++k; if(k == total_seed){ res = true; return;} if(r>0) dfs(r-1,c); if(r<n-1) dfs(r+1,c); if(c>0) dfs(r,c-1); if(c<m-1) dfs(r,c+1); --k; seed[r][c] = false; } int main(){ //ifstream cin("input.txt"); while(cin>>n>>m){ if(n==0 && m==0) break; char c; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>c; if(c=='S') field[i][j] = true; else{ field[i][j] = false; ++total_seed;} } } if(field[0][0] == true) cout<<"NO"<<endl; dfs(0,0); if(res) cout<<"YES"<<endl; else cout<<"NO"<<endl; memset(seed,0,36); k = 0; total_seed = 0; res = false; } return 0; }
相关文章推荐
- zoj 2100 Seeding 【DFS 判断是否能经过每个点一次遍历完整个图】
- !ZOJ 2100--DFS(递归结束条件和回溯还是没理解好)
- Num 36 : ZOJ 2100 [ 深度优先搜索算法 ] [ 回溯 ]
- Zoj 2100 Seeding
- zoj 2100 dfs暴力宽搜
- zoj 2100 Seeding
- zoj 2100 Seeding
- ZOJ 2100 Seeding(简单DFS)
- zoj 2100
- zoj 2100 Seeding
- zoj 2100 Seeding
- zoj 2100 Seeding
- zoj2100 Seeding
- ZOJ 2100 seeding 【DFS】
- zoj 2100 seeding(dfs)
- zoj2100(DFS)
- zoj 2100 Seeding
- ZOJ Problem Set - 2100
- zoj 2100 DFS
- zoj 2100Seeding