程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> AOJ 0118 Property Distribution {廣度優先搜索}

AOJ 0118 Property Distribution {廣度優先搜索}

編輯:關於C++

題意

原題是這樣的:

這裡寫圖片描述

原題呢就是上面這個,我還是來簡單翻譯一下吧。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPr+0tb3PwsPmtcTNvMHLw7Sjv7TzuMXT0DPW1s28sLi1xLHq1r6jrM/gzay1xL/J0tTGtL3Ttb3Su8bwo6zE49Do0qrV0rP21+6689K7ubLT0Lbgydm/6aGjscjI59XiwO+1xL7NysfT0DEwv+mhozwvcD4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20151211/20151211082910159.jpg" title="\" />

它的輸入是這樣的:

10 10
####*****@
@#@@@@#*#*
@##***@@@*
#****#*@**
##@*#@@*##
*@@@@*@@@#
***#@*@##*
*@@@*@@##@
*@*#*@##**
@****#@@#@
0 0

兩個0表示結束輸入,輸出塊的個數即可,上面的輸入對應的輸出就是33。

分析

我還是用的這個給代碼定的規定,方向什麼的。

這裡寫圖片描述

走過的點,全部都賦值為 !,保證下次不會走到就好。for循環中進行判斷,每走一次就完成計算一塊,step也跟著加1,最後輸出其和即可。

代碼

#include 
using namespace std;

#define MAX_W 100
#define MAX_H 100

char 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<= 0 && curRow < H && curCol >= 0 && curCol < W && room[curRow][curCol] == c) {
            dfs(curRow, curCol, c);
        }
    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved