poj1979(Red and Black)
阿新 • • 發佈:2019-02-19
題目:poj1979(Red and Black)
分析:典型的BFS。
當然,需要的資料結構就是佇列。
程式碼:
#include <cstdio> #include <iostream> #include <cstring> #include <queue> #include <cstdlib> using namespace std; #define maxn 25 struct xpoint { int x; int y; }a; bool map[maxn][maxn]; int n,m,ans; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void Input() { for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { char ch; scanf("%c",&ch); if(ch=='#') map[i][j]=false; else map[i][j]=true; if(ch=='@') { a.x=i; a.y=j; } } getchar(); } } bool isOk(xpoint &a) { if(a.x<0||a.y<0||a.x>=n||a.y>=m) return false; return map[a.x][a.y]; } void bfs() { queue<xpoint> que; que.push(a); map[a.x][a.y]=false; ans=0; while(!que.empty()) { xpoint a=que.front(); que.pop(); ans++; xpoint next; for(int i=0;i<4;i++) { next.x=a.x+dir[i][0]; next.y=a.y+dir[i][1]; if(isOk(next)) { que.push(next); map[next.x][next.y]=false; } } } } int main() { while(scanf("%d%d",&m,&n),m|n) { getchar(); Input(); bfs(); printf("%d\n",ans); } return 0; }