最少步数

 

1330:【例8.3】最少步数

    s数组:记录(1,1)到达每一点需要的最少步数

                 s[1][1]自然为 0,其余初始化为 -1

que数组:que[#][1] 表示(1,1)可到达点的 x 坐标

                 que[#][2] 表示(1,1)可到达点的 y 坐标

                 que[#][3] 表示(1,1)可到达点的 最少步数

 

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdlib>
using namespace std;

int dx[12]={-2,-2,-1,1,2,2,2,2,1,-1,-2,-2},    
    dy[12]={-1,-2,-2,-2,-2,-1,1,2,2,2,2,1};
    
int main()
{
    int s[101][101],que[100001][4]={0},x1,y1,x2,y2;    
    memset(s,0xff,sizeof(s));   //s数组初始化 
    int head=1,tail=1;          //初始位置入队 
    que[1][1]=1;que[1][2]=1;que[1][3]=0;
    cin>>x1>>y1>>x2>>y2;
    while(head<=tail)
    {
        for(int d=0;d<=11;d++)   //拓展十二个方向 
        {
            int x=que[head][1]+dx[d];
            int y=que[head][2]+dy[d];
            if(x>0&&y>0)     //保证不出界 
              if(s[x][y]==-1)   //未走过 
              {
                  s[x][y]=que[head][3]+1;
                  tail++;
                  que[tail][1]=x;
                  que[tail][2]=y;
                  que[tail][3]=s[x][y];
                  if(s[x1][y1]>0&&s[x2][y2]>0)
                  {
                    cout<<s[x1][y1]<<endl;
                    cout<<s[x2][y2]<<endl;
                   return 0;    
                }
              }
        }
        
        head++;
        
    }
  
}

 

以上我方代码已修改

 

没修改前:

(如果你发现)

原因是:

 

(去掉“pause”之后就。。就。。可以了)

(但是之前我试过注释掉它 ybt 瓦特掉了所以显示一个点运行错误。。)

  ybt就是欺负我这个lao shi ren

转载于:https://www.cnblogs.com/xiaoyezi-wink/p/10700487.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值