zoj2100-Seeding

来源:互联网 发布:淘宝茜茜家的铺子真假 编辑:程序博客网 时间:2024/05/16 17:29
/*解题思路:首先记录下'.'的个数count,接着每遍历成功一个单元格就num++,当count=num说明全部遍历成功。因为此题从(0,0)开始,但是不知道什么位置停止,所以不能将坐标作为终止条件。 */ #include<iostream>using namespace std;char map[100][100];int book[100][100];int m,n,count=0,num=0,flag=0;int next[4][2]={{0,1},{0,-1},{-1,0},{1,0}};void dfs(int x,int y){int tx,ty,k;if(num==count){flag=1;return ;}for(k=0;k<4;k++){tx=x+next[k][0];ty=y+next[k][1];if(tx<0||tx>=n||ty<0||ty>=m)continue;if(map[tx][ty]!='S'&&book[tx][ty]==0){num++;//访问一次就加一次book[tx][ty]=1;//标记为走过dfs(tx,ty);//进入下一层book[tx][ty]=0;//取消标记,不可缺少 num--;//跳出一次就减一次,不可缺少 } } }int main(){int i,j;while(cin>>n>>m&&n&&m){count=0;//对于循环输入的程序一定注意这些初始化放置在全局还是main中,重要!!之前失败的原因就是这个初始化 num=0;flag=0;for(i=0;i<n;i++){for(j=0;j<m;j++){cin>>map[i][j];if(map[i][j]=='.')count++;}}book[0][0]=1;num++;dfs(0,0);if(flag)cout<<"yes"<<endl;elsecout<<"no"<<endl;}return 0;}

0 0
原创粉丝点击