POJ 1979--DFS or BFS(水)

来源:互联网 发布:电商平台常用的js特效 编辑:程序博客网 时间:2024/05/05 03:13

题意:。表示能走,#表示不能走,@为起点,求从起点出发能走的点的数目

分析:简单的BFS或DFS

BFS代码:

#include<iostream>#include<cstring>#include<queue>using namespace std;int n,m;char a[100][100];int d[4][2]={{0,-1},{0,1},{1,0},{-1,0}};int cnt;int sx,sy;struct h{int x,y;};queue<h> q;void bfs(){h tmp;while(!q.empty()){tmp=q.front();q.pop();for(int i=0;i<4;i++){h tmp2;tmp2.x=tmp.x+d[i][0];tmp2.y=tmp.y+d[i][1];if(tmp2.x>=0&&tmp2.x<m&&tmp2.y>=0&&tmp2.y<n&&a[tmp2.x][tmp2.y]!='#'){cnt++;a[tmp2.x][tmp2.y]='#';q.push(tmp2);}}}}int main(){while(cin>>n>>m){if(!n&&!m) break;while(!q.empty()) q.pop();for(int i=0;i<m;i++)for(int j=0;j<n;j++){cin>>a[i][j];if(a[i][j]=='@') sx=i,sy=j;}a[sx][sy]='#';h tmp;tmp.x=sx,tmp.y=sy;cnt=1;q.push(tmp);bfs();cout<<cnt<<endl;}}

DFS代码:

#include<iostream>#include<cstring>using namespace std;int n,m;char a[100][100];int d[4][2]={{0,-1},{0,1},{1,0},{-1,0}};int cnt;int sx,sy;void dfs(int x,int y){if(a[x][y]=='#') return;a[x][y]='#';cnt++;for(int i=0;i<4;i++){int dx=x+d[i][0];int dy=y+d[i][1];if(dx>=0&&dx<m&&dy>=0&&dy<n){dfs(dx,dy);}}}int main(){while(cin>>n>>m){if(!n&&!m) break;for(int i=0;i<m;i++)for(int j=0;j<n;j++){cin>>a[i][j];if(a[i][j]=='@') sx=i,sy=j;}cnt=0;dfs(sx,sy);cout<<cnt<<endl;}}


0 0
原创粉丝点击