nyist oj 58 最少步數(dfs搜尋),ojdfs

來源:互聯網
上載者:User

nyist oj 58 最少步數(dfs搜尋),ojdfs
最少步數時間限制:3000 ms  |  記憶體限制:65535 KB難度:4

描述

這有一個迷宮,有0~8行和0~8列:

 1,1,1,1,1,1,1,1,1
 1,0,0,1,0,0,1,0,1
 1,0,0,1,1,0,0,0,1
 1,0,1,0,1,1,0,1,1
 1,0,0,0,0,1,0,0,1
 1,1,0,1,0,1,0,0,1
 1,1,0,1,0,1,0,0,1
 1,1,0,1,0,0,0,0,1
 1,1,1,1,1,1,1,1,1

0表示道路,1表示牆。

現在輸入一個道路的座標作為起點,再如輸入一個道路的座標作為終點,問最少走幾步才能從起點到達終點?

(註:一步是指從一座標點走到其上下左右相鄰座標點,如:從(3,1)到(4,1)。)

輸入
第一行輸入一個整數n(0<n<=100),表示有n組測試資料;
隨後n行,每行有四個整數a,b,c,d(0<=a,b,c,d<=8)分別表示起點的行、列,終點的行、列。
輸出
輸出最少走幾步。
範例輸入
23 1  5 73 1  6 7
範例輸出
1211
來源

[苗棟棟]原創

最近好久沒做搜尋的題了,感覺手都有點生了,拿這個題練練手,水題一個,直接用dfs就可以直接水過,也可以用bfs做,對bfs還是很熟練啊,這道題思路還是很清晰的,走過就標記,但是開始那個計數的沒控制好,導致一直沒結果,還有就是dfs用遞迴寫,一定要控制好遞迴的結束情況,不然到時候都不知道錯在哪,還是要溫故而知新啊,對以前學過的東西還是要經常複習一下;

下面是水過的代碼;

#include <cstdio>#include <cstring>#define min(x,y) x>y?y:x  //這種寫法是參考別人的using namespace std;int dir[4][2]={0,1,0,-1,1,0,-1,0};int map[9][9]={ {1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,0,1,0,1}, {1,0,0,1,1,0,0,0,1}, {1,0,1,0,1,1,0,1,1}, {1,0,0,0,0,1,0,0,1}, {1,1,0,1,0,1,0,0,1}, {1,1,0,1,0,1,0,0,1}, {1,1,0,1,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1},};int c,d,m;void dfs(int a,int b,int ans){    int x,y;    if(a==c&&b==d)    {        m=min(m,ans);        return ; //返回,遞迴結束,返回上一層;    }    map[a][b]=1;//標記走過的路徑    for(int i=0;i<4;i++)    {        x=a+dir[i][0];        y=b+dir[i][1];        if(map[x][y]==0)//對路徑進行判斷        {            dfs(x,y,ans+1);//再次搜尋            map[x][y]=0;        }    }}int main(){    int n,a,b;    scanf("%d",&n);    while(n--)    {        m=9999;//這裡用一個比較大的數和計數的進行比較;        scanf("%d%d%d%d",&a,&b,&c,&d);        dfs(a,b,0);        map[a][b]=0;        printf("%d\n",m);    }    return 0;}





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.