POJ 1979 Red and Black

来源:互联网 发布:可达矩阵求解过程 编辑:程序博客网 时间:2024/05/21 17:29
#include<stdio.h>#include<string.h>#include<queue>using namespace std;const int maxn = 1e3;char mp[maxn][maxn];int vis[maxn][maxn];int dx[10] = {0,0,-1,1,1,1,-1,-1};int dy[10] = {1,-1,0,0,-1,1,-1,1};struct node{int x,y;int step;node(int _x, int _y, int _step = 0): x(_x), y(_y),step(_step){}bool operator < (const node & i)const{return step > i.step;}};int main (){int w,h;while (scanf("%d%d", &w, &h) != EOF && w != 0){for (int i = 0 ; i < h; i++){scanf("%s", mp[i]);}int sx,sy;for (int i = 0; i < h; i++){for (int j = 0; j < w; j++){if (mp[i][j] == '@'){sx = i;sy = j;}}}memset(vis,0,sizeof(vis));vis[sx][sy] = 1;queue<node>que;que.push(node(sx,sy));int ans = 1;while (!que.empty() ) {node tem = que.front() ;que.pop() ;for (int i = 0; i < 4; i++){int x = tem.x + dx[i];int y = tem.y + dy[i];if (x < 0 || y < 0 || x >= h || y >= w)continue;if (vis[x][y] == 1)continue;if (mp[x][y] == '#')continue;que.push(node(x,y));vis[x][y] = 1;ans++; }}printf("%d\n",ans);}} 

原创粉丝点击