Discuz! Board

 找回密码
 立即注册
查看: 396|回复: 1

6.28 马的遍历

[复制链接]

54

主题

66

帖子

574

积分

高级会员

Rank: 4

积分
574
发表于 2023-6-28 19:02:04 | 显示全部楼层 |阅读模式
[C++] 纯文本查看 复制代码
 #include<bits/stdc++.h>
int n,m,nx,ny;  
int res[405][405];//res表示最终输出结果,下标代表棋盘位置,值代表最少步数 
int x[8]={1,2,-1,-2,-1,-2,1,2};
int y[8]={2,1,2,1,-2,-1,-2,-1};

struct queue{
	int x,y;
}a[40010];//构建bfs的队列(用数组表示) 

void bfs(int i,int j)
{
     int head=1,tail=2; 
     a[2].x=i,a[2].y=j;
	 res[i][j]=0;//初始位置的最少步数为0 
     while(head<tail)
	 {
        head++;
        for(int q=0;q<8;q++)
		{
			//(xx,yy)表示目前马走到的位置,还有。。。~~变量名真的好难取~~  
            int xx=a[head].x+x[q]; 
            int yy=a[head].y+y[q];
             
            if((res[xx][yy]==-1) && xx>=1 && xx<=n && yy>=1 && yy<=m)//判断是否走过,是否越界 
			{
                tail++;
                res[xx][yy]=res[a[head].x][a[head].y]+1;//最少步数加一 
                a[tail].x=xx;
                a[tail].y=yy;
            }
        }
    }
}

int main()
{
	
    scanf("%d%d%d%d",&n,&m,&nx,&ny);
    memset(res,-1,sizeof res);
    bfs(nx,ny);
    
    for(int i=1;i<=n;i++)
	{
        for(int j=1;j<=m;j++)
		{
			printf("%-5d",res[i][j]);
        }
        printf("\n");
    }
}
回复

使用道具 举报

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
发表于 2023-6-28 21:20:51 | 显示全部楼层
正确
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-2-13 05:06 , Processed in 0.055184 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表