華為機試 迷宮問題dfs
阿新 • • 發佈:2021-01-12
#include<iostream> #include "bits/stdc++.h" using namespace std; int N,M; int MAP[11][11]; void dfs(int i,int j,vector<int>veci,vector<int>vecj){ if(i==N-1&&j==M-1){ for(int k=0;k < veci.size();k++){ cout << "(" << veci[k] << ","<< vecj[k] << ")" <<endl; } } if(i+1 < N && MAP[i+1][j] == 0){ veci.push_back(i+1); vecj.push_back(j); dfs(i+1,j,veci,vecj); veci.pop_back(); vecj.pop_back(); } if(j+1 < M && MAP[i][j+1] == 0){ veci.push_back(i); vecj.push_back(j+1); dfs(i,j+1,veci,vecj); veci.pop_back(); vecj.pop_back(); } return; } int main() { while(cin >> N >> M){ for(int i=0;i < N;i++){ for(int j=0;j < M;j++){ cin >> MAP[i][j]; } } vector<int> vci = {0}; vector<int> vcj = {0}; dfs(0,0,vci,vcj); } return 0; }
題目描述
定義一個二維陣列N*M(其中2<=N<=10;2<=M<=10),如5×5陣列下所示:
intmaze[5][5]={
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,
};
它表示一個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。入口點為[0,0],既第一空格是可以走的路。
輸入描述:
輸入兩個整數,分別表示二位陣列的行數,列數。再輸入相應的陣列,其中的1表示牆壁,0表示可以走的路。資料保證有唯一解,不考慮有多解的情況,即迷宮只有一條通道。
輸出描述:
左上角到右下角的最短路徑,格式如樣例所示。
示例1輸入
複製5 5 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
輸出
複製(0,0) (1,0) (2,0) (2,1) (2,2) (2,3) (2,4) (3,4) (4,4)