首页 > 解决方案 > 我想用 dijsktra 或类似工具从 5,6 变为 0,10,我想用代码解释路径我不擅长编码:D 所以它的循环无限次

问题描述

每次在这个循环中,直到到达目标和源相同的 x 和 y 坐标然后它已经计算距离这个循环检查每个父位置右下角左上角它不起作用,因为我真的不知道如何修复它:D 我也想要路径的位置在 kont 矩阵中它真的很简单但我被卡住了我不知道如何出去

using namespace std;

int main()
{
    int i,j;

        row      column
    int satir=11,stun=13;

这是我要使用的地图,0 表示墙,1 表示你可以移动的道路

    int harita[satir][stun] =
    {
        {0,0,0,1,0,0,0,0,0,0,1,0,0},
        {0,1,1,1,1,0,1,1,1,1,1,1,0},
        {0,1,0,1,1,1,1,1,1,0,0,1,0},
        {0,1,1,1,1,0,1,0,1,1,0,1,0},
        {0,1,0,1,0,0,1,0,1,0,0,1,0},
        {1,1,0,1,1,1,1,0,1,0,1,1,0},
        {0,1,0,0,1,1,1,0,1,1,1,1,0},
        {0,1,0,1,1,1,1,1,1,1,1,1,1},
        {0,1,0,1,0,0,0,0,0,1,1,1,0},
        {0,1,1,1,1,1,1,1,1,1,1,1,0},
        {0,0,0,1,0,0,0,0,0,0,0,0,0},
    };

我只想在cmd上写地图以供检查

    for(i=0; i<satir; i++)
    {
        for(j=0; j<stun; j++)
        {
           cout<<" "<<harita[i][j];
        }

        cout<<endl;
    }


      // the path i want to write like kont[0][10],kont[0][9],kont[0][8],kont[0][7],kont[0][6],kont[1][6]
      int kont[satir][stun];


      // distance


    int mesafe=0;


      // source location start


    int dx=0,dy=10;


      // target location


    int xk=5,yk=6;

每次在这个循环中,直到到达目标和源相同的 x 和 y 坐标然后它已经计算距离这个循环检查每个父位置右下角左上角它不工作 ofc 因为我真的不知道如何修复它:D 我也想位置kont 矩阵中的路径非常简单,但我被卡住了,我不知道如何出去

    while(1)
    {



        if( dx == xk && dy == yk )
        {
            cout<<"mesafe budur="<<mesafe;




  // if source and target same location write the distance and exit while loop


            exit(1);
        }

         // for check loop count

         // ofc infinite now

        cout<<"kertenkele";

用于寻找最短路径,稍后我将使用它

        kont[dx][dy]=1;
       

每次检查 4 如果没有墙,如果有办法,它会移动到那里,直到到达目标 x 和 y 坐标

去底部

        if(harita[dx+1][dy]==1)
        {
            dx++;
            mesafe++;
        }

向右走

        if(harita[dx][dy+1]==1)
        {
        dy++;
        mesafe++;
        }

为了上去

        if(harita[dx-1][dy]==1)
        {
            dx--;
            mesafe++;
            }

每次都在循环中向左走,检查每个邻居,直到达到目标

        if(harita[dx][dy-1]==1)
        {
            dy--;
            mesafe++;
            }
    }

    return 0;
}

问题在于它的循环无限时间好,我想我不太明白

我如何从循环中获取数据

标签: c++dijkstramaze

解决方案


推荐阅读