hdu 1312Red and Black 解题报告
生活随笔
收集整理的這篇文章主要介紹了
hdu 1312Red and Black 解题报告
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1312
第二條深搜,題目并不難,但是做了我好久好久,由于一個細節,讓我賭上了一個晚上的時間。
題目大意:從圖中的標記'@'開始,向四個相鄰的方向找黑色瓷片'.' ,統計能經過的黑色瓷片的數目('@'也算統計中的一個),當然,這個人是不能走紅色瓷片'#'的。
???? 有兩個地方需要注意:1、要分清w、h,哪一個對應行,哪一個表示列,非常別扭,最好不要按它的(w:列 h:行)???? 2、統計符合條件的 '.' 時,不要遺漏了對初始位置'@'的統計。
?????總結: 細心真的非常非常重要!!!!
1 #include <iostream> 2 using namespace std; 3 4 char map[25][25]; 5 int h, w, num; 6 7 void dfs(int i, int j) 8 { 9 if (map[i][j] != '.' || i < 0 || j < 0 || i >= h || j >= w) 10 return; 11 else 12 { 13 num++; //找到'.'就統計 14 map[i][j] = '#'; 15 dfs(i-1, j); 16 dfs(i, j+1); 17 dfs(i+1, j); 18 dfs(i, j-1); 19 } 20 } 21 22 int main() 23 { 24 int i, j, k, l; 25 while (cin >> w >> h && (w || h)) 26 { 27 num = 0; 28 for (i = 0; i < h; i++) //h的位置之前寫成了w, 29 { 30 for (j = 0; j < w; j++) //w的位置之前寫成了h,下面的for語句也是這樣,找了很久才發現這個bug 31 32 cin >> map[i][j]; 33 } 34 for (i = 0; i < h; i++) 35 { 36 for (j = 0; j < w; j++) 37 { 38 if (map[i][j] == '@') 39 { 40 map[i][j] = '.'; 41 dfs(i, j); 42 } 43 } 44 } 45 cout << num << endl; 46 } 47 return 0; 48 }
?
?
轉載于:https://www.cnblogs.com/windysai/archive/2013/04/22/3036626.html
總結
以上是生活随笔為你收集整理的hdu 1312Red and Black 解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uestc 1012 饭卡
- 下一篇: 能打败自由之神吗?