C 初學記錄(深度搜尋 遞迴)

2021-09-30 00:13:14 字數 1671 閱讀 8818

深度搜尋

走地圖的題目是深度搜尋裡比較容易理解的題目,更深層次的是全排列和七皇后等經典題目,更加難以理解,**比較抽象。

題目:紅與黑

蒜廠有一間長方形的房子,地上鋪了紅色、黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。

請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。

輸入格式

第一行是兩個整數 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 的函式,公式就會...