啊哈算法书中,深度优先搜索的例子代码

<啊哈,算法> 书中深度优先搜索例子,代码中的 判断是否越界,似乎不对, 还是我理解有误?

if(tx<1 || tx>n || ty<1 || ty>m)    其中 ,tx ,ty 是迷宫数组下标, n,m 是 迷宫数组的行和列, tx,ty 最小可取0, 而tx最大只能是n-1,ty最大只能是m-1, 所以越界判断应该是:

if(tx<0|| tx>n-1 || ty<0 || ty>m-1)   

我理解有错误? 

明白了 , 书中的迷宫数组下标从1,1开始

=======================================================

我改成了  迷宫数组从 0,0 开始

#include
#include
#include
using namespace std;
int row=0,col=0,minstep=99999;
int a[51][51],book[51][51];
int startx,starty=0;
int endx,endy=0;
int loopcount=0;
void dfs(int x,int y,int step)
{
    
    int next[4][2]={{0,1},  //向右走   
                    {1,0},   //向下走 
                    {0,-1},  //向左走 
                    {-1,0}};  //向上走 
    if(x == endx && y == endy )
    {
        if(step < minstep)
            minstep = step;
        return ;
    }
    //four ways
    for(int k=0;k<=3;k++)
    {
        cout<<++loopcount<         int kx=x+next[k][0];
        int ky=y+next[k][1];
        
        //判断是否越界 
        if((kx < 0) || (kx >row-1) || (ky <0) || (ky > col-1))
            continue;
        if((a[kx][ky] == 0) && (book[kx][ky] == 0))
        {
            book[kx][ky]=1;
            printf(" a%d%d=%d ",kx,ky,a[kx][ky]);
            
            cout<     cin >> row;
    cout << "please input the col of the road: ";
    cin >>col;
    //读入迷宫 
    cout<<" 请输入迷宫:"<     for(int i=0;i     {
        for(int j=0;j             cin >> a[i][j];
    }
    cout <<"please input the start x,y: " ;
    cin >> startx >> starty;
    cout << "please input the end x,y: ";
    cin >> endx>> endy;
    cout<<" 迷宫是:"<     for(int i=0;i     {
       for(int j=0;j        {
           cout << a[i][j];
       }
       cout << endl;
    }
    //从起点开始搜索 
    cout<<"起点:"<     
    book[startx][starty]=1;
    dfs(startx,starty,0);
    
    cout << minstep<     cout <<"loopcount:"<     return 0;
}

你可能感兴趣的:(数据结构)