题意
原题是这样的:
原题呢就是上面这个,我还是来简单翻译一下吧,
AOJ 0118 Property Distribution {广度优先搜索}
。<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPr+0tb3PwsPmtcTNvMHLw7Sjv7TzuMXT0DPW1s28sLi1xLHq1r6jrM/gzay1xL/J0tTGtL3Ttb3Su8bwo6zE49Do0qrV0rP21+6689K7ubLT0Lbgydm/6aGjscjI59XiwO+1xL7NysfT0DEwv+mhozwvcD4NCjxwPjxpbWcgYWx0PQ=="这里写图片描述" src="http://www.2cto.com/uploadfile/Collfiles/20151211/20151211082910159.jpg" title="\" />它的输入是这样的:
<code class="hljs" mel="">10 10####*****@@#@@@@#*#*@##***@@@*#****#*@**##@*#@@*##*@@@@*@@@#***#@*@##**@@@*@@##@*@*#*@##**@****#@@#@0 0</code>
两个0表示结束输入,输出块的个数即可,上面的输入对应的输出就是33。
分析
我还是用的这个给代码定的规定,方向什么的。
走过的点,全部都赋值为
代码
<code class="hljs" cpp="">#include<iostream>using namespace std;#define MAX_W 100#define MAX_H 100char room[MAX_W][MAX_H];int W,H;const int direc[4][2] = { {0, -1}, {1, 0}, {0, 1}, {-1, 0},};void dfs(const int& row, const int& col, const char c);int main() { while(cin>>H>>W, W > 0) { int step = 0; int col, row; for (row = 0; row < H; ++row) { for (col = 0; col < W; ++col) { cin >> room[row][col]; } } for (row = 0; row < H; ++ row) { for(col = 0; col < W; ++ col) { if(room[row][col] != '!') { dfs(row, col, room[row][col]); ++ step; } } } cout<<step<<endl; char="" const="" curcol="col" currow="" d="0;" int="" return="" void="">= 0 && curRow < H && curCol >= 0 && curCol < W && room[curRow][curCol] == c) { dfs(curRow, curCol, c); } }}</step<<endl;></iostream></code>