深度搜尋
走地圖的題目是深度搜尋裡比較容易理解的題目,更深層次的是全排列和七皇后等經典題目,更加難以理解,**比較抽象。
題目:紅與黑
蒜廠有一間長方形的房子,地上鋪了紅色、黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。
請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。
輸入格式
第一行是兩個整數 ww 和 hh,分別表示 xx 方向和 yy 方向瓷磚的數量。ww 和 hh 都不超過 2020。
在接下來的 hh 行中,每行包括 ww 個字元。每個字元表示一塊瓷磚的顏色,規則如下
1)'.':黑色的瓷磚;
2)'#':白色的瓷磚;
3)'@':黑色的瓷磚,並且你站在這塊瓷磚上。該字元在每個資料集合中唯一出現一次。
輸出格式
輸出一行,顯示你從初始位置出發能到達的瓷磚數(記數時包括初始位置的瓷磚)。
輸出時每行末尾的多餘空格,不影響答案正確性
樣例輸入
6 9....#.
.....#
......
......
......
......
......
.#..#.
樣例輸出
45ac**
#include #include using namespace std;
int n,m;
int step=0;//代表到達黑色瓷磚的塊數
char maze[30][30];
bool vis[30][30];
int dir[4][2]=,,,};//代表上下左右四個方向
//判斷陣列是否越界
bool in(int x,int y)
}int x,y;
//尋找@的位置
for(int i=0;i**理解
編寫**主要遇到的問題是如何讓程式自己進行「行走」,因此我編輯**
int dir[4][2]=,,,};
和
int tx=x+dir[i][0];
int ty=y+dir[i][1];
成為配套程式讓程式自己進行「行走」。在「行走」的函式中這連個**會幫助程式進行計數和行走,計數則需要加乙個
step++;
行走在地圖上首要考慮的是越界相關的問題,這時候就需要乙個判定函式,該函式應該對重複路線,碰壁,範圍進行判定,既是
bool in(int x,int y)
{ return 0<=x&&x若return不成立則返回false,若成立則返回ture,與該函式進行匹配的程式是
vis[x][y]=true;
if(!vis[tx][ty]&&maze[tx][ty]=='.'&&in(tx,ty));
遞迴函式可以讓程式自己不停的「行走」,直到完成整個執行輸出step。 C 初學記錄(深度搜尋 遞迴)
深度搜尋 走地圖的題目是深度搜尋裡比較容易理解的題目,更深層次的是全排列和七皇后等經典題目,更加難以理解,比較抽象。題目 紅與黑 蒜廠有一間長方形的房子,地上鋪了紅色 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。輸...
C 初學記錄 階乘 遞迴
練習題目三 用遞迴進行階乘 執行 includeusing namespace std int f int n int n int main cin n cout 編寫心得 遞迴的核心個人感覺是在返回return,比如這個階乘的函式,當他返回值為nf n 1 的時候,繼續帶入f n 的函式,公式就會...
C 初學記錄 階乘 遞迴
練習題目三 用遞迴進行階乘 執行 includeusing namespace std int f int n int n int main cin n cout 編寫心得 遞迴的核心個人感覺是在返回return,比如這個階乘的函式,當他返回值為nf n 1 的時候,繼續帶入f n 的函式,公式就會...