poj 1979 zoj 2165 Red and Black 深搜做法

来源:互联网 发布:淘宝老酒拍卖会不会假 编辑:程序博客网 时间:2024/05/17 08:32
/*第一个深搜参考了大牛的代码并作了少许优化*/#define LOCAL#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<cstdlib>#include<cctype>#include<iomanip>#include<string>#include<algorithm>#include<ctime>#include<stack>#include<queue>#include<vector>#define N 25using namespace std;int m,n,ans,rec[N][N],dir[4][2]={0,1,0,-1,1,0,-1,0};   //控制转向bool legal(int x,int y)                                                  //判断数据是否合法{if(x>=1&&x<=m&&y>=1&&y<=n) return true;return false;}void DFS(int x,int y)                       //递归搜索{int i,sx,sy;rec[x][y]=1;ans++;//标记当前点已经遍历过,每遍历一个节点ans+1for(i=0;i<4;i++)                          {sx=x+dir[i][0];sy=y+dir[i][1];//转向if(!rec[sx][sy]&&legal(sx,sy)) //若当前结点未被遍历且”合法“遍历该节点 DFS(sx,sy);}}int main(){#ifdef LOCAL       freopen("input.txt","r",stdin);       freopen("output.txt","w",stdout);#endif   int i,j,x,y;char ch;   while(cin>>n>>m&&m&&n)   {   memset(rec,0,sizeof(rec));   for(i=1;i<=m;i++){for(j=1;j<=n;j++){cin>>ch;if(ch=='#') rec[i][j]=1;else if(ch=='@') {x=i;y=j;}}}    ans=0;  DFS(x,y);cout<<ans<<endl;   }   return 0;}

原创粉丝点击