poj1979 -- Red and Black
阿新 • • 發佈:2019-01-29
這題是求相連通的黑瓷磚的個數,相連通是指四聯通,即上下左右,起始位置為@所在位置,從起始位置dfs即可,具體程式碼如下:
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int m,n; //列,行數 char maze[30][30]; //迷宮 int visit[30][30]; //0未訪問,1訪問過 int sr,sc; //起始行列值 int cnt; //聯通黑瓷磚個數 int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; void dfs(int r,int c) { for(int i=0;i<4;i++) { int nextr=r+dir[i][0]; int nextc=c+dir[i][1]; if(nextr>=0&&nextr<n&&nextc>=0&&nextc<m&&!visit[nextr][nextc]&&maze[nextr][nextc]!='#') { cnt++; visit[nextr][nextc]=1; dfs(nextr,nextc); } } } int main() { //freopen("test.txt","r",stdin); while(cin>>m>>n&&m&&n) { getchar(); cnt=0; memset(visit,0,sizeof(visit)); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { scanf("%c",&maze[i][j]); if(maze[i][j]=='@') { sr=i; sc=j; } } getchar(); } visit[sr][sc]=1; dfs(sr,sc); cout<<cnt+1<<endl; //起始位置也算,所以加一 } return 0; }