当前位置:网站首页>First week of July

First week of July

2022-07-07 23:25:00 zjsru_ Beginner

The knight moves

Title Description : Write program , Calculate the minimum number of times the knight needs to move from one position to another . The rules of Knight movement are as follows .

Every beat , There are eight choices , After many correct choices, you can find a nearest journey .

Algorithm design :

This is a problem of finding the shortest distance , have access to queue Perform breadth first search steps , Now put the starting point in the queue , If the queue is not empty , Then the right head out of the right , Otherwise, expand 8 A direction , If you find a target , Then the step size is returned immediately +1 And put it in the queue , Mark it as visited , If the knight's current position is (x,y), Then the current position coordinate plus the offset when moving .

Input :

3
8
0 0
7 0 
100
0 0
30 50
10
1 1
1 1

Output :

5
28
0

  Code :

#include<bits/stdc++.h>

int size ;
struct status{     # Structure 
	int x;
	int y;
	int step;
}q[100006];

int vec[8][2]={
   {-2,-1},{-1,-2},{-2,1},{-1,2},{2,-1},{1,-2},{2,1},{1,2}};  # Direction 
int is[333][333];
void bfs(int sx,int sy,int ex,int ey){     # Breadth first search 
	int head =0,tail=0;
    memset(is,0,sizeof(is));
	q[tail].x=sx;
	q[tail].y=sy;
	is[sx][sy]=1;
	tail++;
	while (head<tail){
		if (q[head].x==ex&&q[head].y==ey){
				printf("%d\n",q[head].step);
				break ;
		}
		for(int i=0;i<8;i++){       # Traverse all directions 
			int nx=q[head].x+vec[i][0];
			int ny=q[head].y+vec[i][1];
			int step=q[head].step;
			if (nx>=0&&nx<size&&ny>=0&&ny<size&&is[nx][ny]==0){
				q[tail].x=nx;
				q[tail].y=ny;
				q[tail].step=step+1;
				is[nx][ny]=1;
				tail++;
			}	
		} 
		head ++;
	}
	
} 

int main(){
	int k;
	scanf("%d",&k);
	int sx,sy,ex,ey;
	while (k--){        # Traverse each target to achieve the shortest distance 
		scanf("%d",&size);
		scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
		bfs(sx,sy,ex,ey);
	}
	return 0;
} 

YJG

原网站

版权声明
本文为[zjsru_ Beginner]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207072017013227.html