深搜之最短路徑問題

2021-10-21 07:24:09 字數 1627 閱讀 4608

從起點走到終點的迷宮;

若求所走的步數,則先設定

int min1=0x3f;

需構造兩個二維陣列,乙個用來儲存地圖,另乙個用來是否已走過;

注意入dfs前與出dfs前狀態相同,即注意回溯;

關鍵是上下左右四個方向移動,樸素寫法為

#include

using

namespace std;

int h,l,q[15]

[15];

//1表示可走,0表示不可走;

int startx,starty,endx,endy;

int min1=

0x3f

;int cnt;

int flag[15]

[15];

//0代表未走,1代表已走過;

//int dfs(int x,int y,int cnt);

void

dfs(

int x,

int y,

int cnt)

}//右;

if(flag[x]

[y+1]==

0&&q[x]

[y+1]==

1)//下if

(flag[x+1]

[y]==

0&&q[x+1]

[y]==1)

//左if

(flag[x]

[y-1]==

0&&q[x]

[y-1]==

1)//上if

(flag[x-1]

[y]==

0&&q[x-1]

[y]==1)

return;}

intmain()

cin>>startx>>starty>>endx>>endy;

dfs(startx,starty,cnt)

; cout

}

其中右下左上為順時針方向排列,故可用迴圈來優化;

#include

using

namespace std;

int h,l,q[15]

[15];

//1表示可走,0表示不可走;

int startx,starty,endx,endy;

int min1=

0x3f

;int cnt;

int dx[4]

=;int dy[4]

=;int flag[15]

[15];

//0代表未走,1代表已走過;

//int dfs(int x,int y,int cnt);

void

dfs(

int x,

int y,

int cnt)

}for

(int k=

0;k<=

3;k++)}

return;}

intmain()

cin>>startx>>starty>>endx>>endy;

dfs(startx,starty,cnt)

; cout

}

用for迴圈代替向上下左右走的四個方向

最短路徑之最短路徑問題

提交 狀態 討論版 命題人 外部匯入 題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的 任務是找出從一點到另一點之間的最短路徑。輸入共n m 3行,...

資料結構之最短路徑問題

1.定義概覽 dijkstra 迪傑斯特拉 演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,...

MZY尋寶(深搜dfs寫的最短路徑)

時間限制 1 sec 記憶體限制 128 mb 提交 165 解決 50 提交 狀態 討論版 貪心的mzy去乙個迷宮尋寶。已知 若mzy在位置 x,y 他下一次只能移動到 x 1,y x 1,y x,y 1 x,y 1 四個位置中的任乙個 前提不能越界 畢竟他不是我,我可以直接飛到寶物那裡去。由於m...