定義乙個二維陣列:
int maze[5][5] = ;
它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。
input
乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。
output
左上角到右下角的最短路徑,格式如樣例所示。
sample input
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
sample output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
利用佇列進行廣搜,不讓求步數,但是要記錄路徑;
#include#includeusing namespace std;
int vis[6][6],mp[6][6];
struct node pre[10][10];
int dir[4][2]= ,,,};
void bfs(node a)
for(int i=0; i<4; i++)
} }}void print(int x,int y) else
print(pre[x][y].x,pre[x][y].y);
printf("(%d, %d)\n",x,y);
}int main()
} node a;
a.x=0,a.y=0;
bfs(a);
print(4,4);
return 0;
}
深搜**:
#includeusing namespace std;
int pre[10][10],mp[6][6];
int vis[10][10];
int dir[4][2]=;
struct nodea[10][10];
void dfs(int x,int y)
for(int i=0;i<4;i++)
}void print(int x,int y)
print(a[x][y].x,a[x][y].y);
printf("(%d, %d)\n",x,y);
}int main()
dfs(0,0);
print(4,4);
}
深搜與廣搜
深搜是一種一條路走到黑,碰壁就倒退的演算法。運用遞迴思想,如果到了不符合條件的節點就撤回一步,然後再選擇另一條路走下去。如果這個節點的所有路徑都走完了,再撤回一步。最簡單的模板 int x 4 int y 4 上下左右四個方向走。也可以八個方向,這裡我就不寫了。void dfs int fx,int...
廣搜與深搜演算法
bfs 廣度優先搜尋 從起點開始,檢視與其相鄰並且滿足題中條件的周圍的所有點 第一層點 然後再以他們為 起點 再去檢視與他們相鄰的第二層的點,一層一層的遍歷,直到找到目標。廣搜一般用於尋找最小路徑等型別題目,因為是層層尋找,所以尋找到的目標一定是最好的解,其大概過程如同一滴水滴到水池產生的水波。但是...
迷宮問題 廣搜
定義乙個二維陣列 int maze 5 5 queue 26 int head 0,tail 0,a 5 5 book 5 5 void function int tail 引數是隊尾 else function queue tail f 如果隊尾的父節點不是0 就將該父節點作為新的隊尾繼續呼叫 這...