AOJ 0118 Property Distribution {广度优先搜索} -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

题意

    原题是这样的:

   

    原题呢就是上面这个,我还是来简单翻译一下吧,

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。

分析

    我还是用的这个给代码定的规定,方向什么的。

   

    走过的点,全部都赋值为!,保证下次不会走到就好。for循环中进行判断,每走一次就完成计算一块,step也跟着加1,最后输出其和即可。

代码

<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>

最新文章