DFS(深度優先遍歷)----最短路徑
自己根據看的內容寫的,基本意思領會到已經會寫,但是有時候界限值問題會搞得頭大,浪費很多時間
不過經驗就是先別急著寫程式,現在腦子裡或者紙上多寫寫
剛開始一下子去寫有點兒懵,後來就先寫了全排列,記住了大概意思
然後去吃飯的路上又想了想流程,下午起來再寫時就相對來說比較順暢了
問題是:將n,m設定為確切的邊界值還是邊界值-1時結果不同,可能是我其他的一些邊界值沒改吧,不過基本上完成了
明天再把廣度優先遍歷完成
#include<stdio.h> int n,m; int step=0,minstep=9999; int b[100][100]; int a[100][100]; int startx,starty,endx,endy; int next[4][2]={0,1,1,0,0,-1,-1,0}; int nx,ny; void dfs(int x,int y,int step){ int i,j; if(x==endx&&y==endy){ if(step<minstep){ minstep=step;
} return; } for(i=0;i<4;i++){ nx=x+next[i][0]; ny=y+next[i][1]; if(nx>n||ny>m||nx<1||ny<1||a[x][y]>0){ continue; } if(b[nx][ny]==0){ b[nx][ny]=1; dfs(nx,ny,step+1); b[nx][ny]=0; }
} return;
} int main(){ int i,j; scanf("%d %d",&n,&m); printf("請輸入初始位置:"); scanf("%d %d",&startx,&starty); printf("請輸入目標位置:"); scanf("%d %d",&endx,&endy); printf("請輸入地圖內容(0為空位置,1為有障礙物的地方):"); for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ scanf("%d",&a[i][j]); } } b[startx][starty]=1; dfs(startx,starty,0); printf("%d",minstep); return 0;
}