這也是一道利用了dfs的題目,先說下我的思路:用乙個二維陣列記錄每個字母所代表的含義(管道方向),用另乙個二維陣列記錄4個方向的變換座標;隨後利用經典的dfs遞迴遍歷即可~(還要注意在方向的處理上前後要保持一致,否則很容易計算出錯 :| )
農田灌溉(farm irrigation)
題目描述:
benny有一大片農田需要灌溉。農田是乙個長方形,被分割成許多小的正方形。每個正方形中都安裝了水管。不同的正方形農田中可能安裝了不同的水管。一共有11種水管,分別用字母a~k標明,如圖1所示。
benny農田的地圖是由描述每個正方形農田中水管型別的字母組成的矩陣。例如,如果農田的地圖為: adc fjk ihe
則農田中水管分布如圖2所示。
某些正方形農田的中心有水源,因此水可以沿著水管從乙個正方形農田流向另乙個正方形農田。如果水可以流經某個正方形農田,則整個正方形農田可以全部灌溉到。 benny想知道至少需要多少個水源,以保證整個農田都能被灌溉到? 例如,圖2所示的農田至少需要3個水源,圖中的圓點表示每個水源。
輸入描述:
輸入檔案中包含多個測試資料。每個測試資料的第1行為兩個整數m和n,表示農田中有m行,每行有n個正方形。接下來有m行,每行有n個字元。字元的取值為'a'~'k',表示對應正方形農田中水管的型別。當m或n取負值時,表示輸入檔案結束。如果m和n的值為正數,則其取值範圍是1≤m, n≤50。
輸出描述:
對輸入檔案中的每個測試資料所描述的農田,輸出佔一行,為求得的所需水源數目的最小值。
樣例輸入:
2 2dk
hf 3 3
adc
fjk
ihe
-1 -1
樣例輸出:
2 3閒話少敘,直接上**+注釋~
code:
[cpp]view plain
copy
?#include
using
namespace
std;
#define maxn 50
char
map[maxn][maxn];
//地圖
intm, n;
//m:農田行數,n:每行的正方形個數
intdir[4][2] = , , , };
//管道座標變換的四個方向:對應的順序上下左右。
intdiro[11][4] = , , ,
, , ,
, , ,
,
}; //每種農田塊對應的4個管道方向(-1為左或上、1為右或下、0為沒有)。
void
dfs(
intx,
inty)
//否則為向下走(1)或向右走(3),比如向下走則判斷原座標的「下」管道和下乙個方向座標的「上」管道。對應方向所代表的值-1
else
if(map[xx][yy]!=
'y'&& diro[temp-
'a'][i]*diro[map[xx][yy]-
'a'][i-1]==-1) dfs(xx, yy);
} }
intmain()
printf("%d\n"
, count);
} return
0;
}
執行結果:
如有bug,歡迎拍磚~ :)
營銷之農田法則
其實很多事情都是想通的,現下最流行的網路營銷和傳統的營銷模式區別在那?就是營銷的手段不同,採用的媒介不同,但是它們的最終目的都是相同的,為了品牌或是銷售的提公升。今天我們不討論兩種營銷方式的優劣,從本質來看問題。因為我們的seo診斷業務主要是面對中小企業的,所以空城經常會和各類企業的老闆打交道,他們...
DFS的遞迴實現
對乙個例子的理解,以下是關係圖的關係矩陣,求從1開始能到哪個數 include include e include include using namespace std intconst n 5 int maze n n int visit n 1 迴圈的思路 用遞迴,一旦有更深的點就產生新的迴圈...
DFS實現floodfill演算法
多組案例,每組案例輸入乙個m行n列的字元矩陣,統計字元 組成多少個連通塊。如果兩個字元 所在的格仔相鄰 橫 豎或對角線 則說明它們屬於同一連通塊。sample input 1 1 3 5 1 8 5 5 0 0sample output 012 21.找到油田,然後通過迴圈遍歷他周圍的八個位置,不斷...