UVA572
貼上代碼,此題每個點只能訪問一次,所以需要設置一個vis[],來判斷每個點是否被訪問過
//寬度優先遍歷 #include<cstdio> #include<string> #include<iostream> #include<ctime> #include<queue> #include<cstring> using namespace std; int row,col; char map[105][105]; char vis[105][105]; int cnt = 0;//typedef pair<int,int>PII;bool in_map(int r,int c) {if(r<row&&r>=0&&c>=0&&c<col)return true;return false; } int num=0; int dr[] = {-1,-1,-1,0,0,1,1,1}; int dc[] = {-1,0,1,-1,1,-1,0,1}; void dfs(int r, int c) {vis[r][c] = cnt;for(int i = 0; i<8;i++){if(in_map(r+dr[i],c+dc[i])&&!vis[r+dr[i]][c+dc[i]]&&map[r+dr[i]][c+dc[i]]=='@')dfs(r+dr[i],c+dc[i]);} } void print_map() {for(int i=0;i<row;i++){for(int j=0;j<col;j++){printf("%c",map[i][j]);}printf("\n");}printf("\n"); } int main() { #ifdef localfreopen("input.txt","r",stdin);freopen("out.txt","w",stdout); #endifwhile(scanf("%d%d",&row,&col)==2&&row&&col){memset(vis,0,sizeof(vis));cnt = 0;for(int i=0;i<row;i++){scanf("%s", map[i]);} //print_map();for(int i=0;i<row;i++){for(int j=0;j<col;j++){if(!vis[i][j]&&map[i][j]=='@'){cnt++;dfs(i,j);}}} //print_map();printf("%d\n",cnt);}return 0; }?
轉載于:https://www.cnblogs.com/TorettoRui/p/10437813.html
總結
- 上一篇: 数据库分析
- 下一篇: 链接多个数据库的方法