從起點走到終點的迷宮;
若求所走的步數,則先設定
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...