1. 程式人生 > >DFS(深度優先遍歷)----最短路徑

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;

}