本文主要是介绍红与黑(典bfs),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0326重做,成功
数据范围
1≤W,H≤20
输入样例:
6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
0 0
输出样例:
45
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>using namespace std;char mp[25][25];
int cnt;
bool vis[25][25];
int w,h;
int sx,sy;
struct node{int x,y;
};
int dx[] = {1,-1,0,0};
int dy[] = {0,0,1,-1};bool bfs(int xx, int yy){vis[xx][yy] = true;queue<node> q;q.push({xx,yy});while(!q.empty()){node temp = q.front();q.pop();for(int i=0;i<4;i++){int nx = dx[i] + temp.x;int ny = dy[i] + temp.y;if(mp[nx][ny] == '#') continue;if(nx < 0 || nx >= h || ny < 0 || ny >= w || vis[nx][ny]) continue;if(mp[nx][ny] == '.' && !vis[nx][ny]) {cnt++;vis[nx][ny] = true;q.push({nx,ny});}}}printf("%d\n",cnt);
}
int main()
{while(1){memset(mp,'#',sizeof mp);memset(vis,false,sizeof vis);cnt=1;scanf("%d%d",&w,&h);if(w==0 && h==0){break;}char s[25];for(int i=0;i<h;i++){scanf("%s",&s);for(int j=0;j<w;j++){mp[i][j] = s[j];if(mp[i][j] == '@'){sx = i;sy = j;}}}bfs(sx,sy); }return 0;
}
这篇关于红与黑(典bfs)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!