AOJ 0118: Property Distribution (简单DFS)

来源:互联网 发布:圆周率网络 编辑:程序博客网 时间:2024/06/05 10:11

题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0118

题意:给定一个矩阵,同类字符相连的为一个块,问总共有几个块。

输入:h,w(行和列)0 <= h <= 100,0 <= w <= 100

   矩阵

   输入包含多组用例,以0,0结束。

输出:块数。

代码:

#include <iostream>using namespace std;typedef long long ll;#define INF 2147483647int w,h;char a[102][102];int dir[4][2] = {-1,0,1,0,0,-1,0,1};int ans = 0;void dfs(int x,int y,char s){    if(x < 0 || x >= h || y < 0 || y >= w || a[x][y] != s) return;    char t = a[x][y];    a[x][y] = 'o';    for(int i = 0;i < 4; i++){        dfs(x+dir[i][0], y+dir[i][1], t);    }}int main(){    while(cin >> h >> w){        if(w == 0 && h == 0) break;        ans = 0;        int sx,sy;        for(int i = 0;i < h; i++){            for(int j = 0;j < w; j++){                cin >> a[i][j];            }        }        for(int i = 0;i < h; i++){            for(int j = 0;j < w; j++){                if(a[i][j] != 'o'){                    ans++;                    dfs(i,j,a[i][j]);                }            }        }        cout << ans << endl;    }    return 0;}