HDU 1312 Red and Black(BFS,DFS)

来源:互联网 发布:淘宝开放平台有什么用 编辑:程序博客网 时间:2024/04/30 15:58
题目:

http://acm.hdu.edu.cn/showproblem.php?pid=1312

题解:

受不了,这题前天就开始A了,昨天做模拟赛没A,晚上A,深搜做了几次,不对,广搜做了几次,也不对,错误的答案却一样,拼命的找BUG就是不去再审次题,尼玛,惯性思维以为输入是先行再列,数据给的是先列再行,狂汗。

审题审题审题啊

纯DFS或者BFS,直接看代码就懂了应该。

代码:

BFS

#include<iostream>#include<queue>using namespace std;char map[23][23];int dir[4][2]={1,0,0,-1,-1,0,0,1};struct P{int x;int y;}o;int main(){int n,m;while(~scanf("%d%d",&m,&n)){if(n==0&&m==0) break;int i,j;int a,b;        for (i=1;i<=n;i++){for (j=1;j<=m;j++){cin>>map[i][j];if (map[i][j]=='@')map[a=i][b=j]='#';}}queue <P> que;P s={a,b};que.push(s);int sum=0;while(!que.empty()){sum++;s=que.front();que.pop();int nx,ny;for(i=0;i<4;i++){nx=dir[i][0]+s.x;ny=dir[i][1]+s.y;if(nx>0&&nx<=n&&ny>0&&ny<=m&&map[nx][ny]=='.'){map[nx][ny]='#';P v={nx,ny};que.push(v);}}}printf("%d\n",sum);}return 0;}


DFS


#include<iostream>using namespace std;char map[23][23];int dir[4][2]={1,0,0,-1,-1,0,0,1};int n,m;int sum;void DFS(int x,int y){map[x][y]='#';sum++;int i;for(i=0;i<4;i++){int nx,ny;nx=x+dir[i][0];ny=y+dir[i][1];if(nx>0&&nx<=n&&ny>0&&ny<=m&&map[nx][ny]=='.'){DFS(nx,ny);}}return;}int main(){while(~scanf("%d%d",&m,&n)){if(n==0&&m==0) break;int i,j;int a,b;        for (i=1;i<=n;i++){for (j=1;j<=m;j++){cin>>map[i][j];if (map[i][j]=='@'){a=i;b=j;}}}sum=0;DFS(a,b);printf("%d\n",sum);}return 0;}




0 0