Java P1443 马的遍历

题目链接
广度优先搜索题目,一个点有八个方向,因为马走日

这个bfs用队列

import java.util.*;
import java.math.*;
public class Main {
     
    public static int dirx[]={
     -1,-1,-2,-2,1,1,2,2};
    public static int diry[]={
     -2,2,-1,1,-2,2,1,-1};
    public static void main(String[] args){
     
    	Scanner sc=new Scanner(System.in);
    	int r=sc.nextInt();
    	int c=sc.nextInt();
    	int x=sc.nextInt();
    	int y=sc.nextInt();
    	int[][] res=new int[r+1][c+1];
    	for(int i=1;i<=r;i++)
    		Arrays.fill(res[i],-1);
    	Queue<int[]> q=new LinkedList<int[]>();  //int【】存储坐标
    	q.offer(new int[]{
     x,y});
    	int step=0;
    	while(!q.isEmpty()){
     
    		int len=q.size();
    		for(int i=0;i<len;i++){
     
    			int[] cur=q.poll();
    		    int curx=cur[0];
    		    int cury=cur[1];
    		    res[curx][cury]=step;
    		    for(int j=0;j<8;j++){
     
    		    	int nextx=curx+dirx[j];
    		    	int nexty=cury+diry[j];
    		    	if(nextx<1||nexty<1||nextx>r||nexty>c||res[nextx][nexty]!=-1)
    		    		continue;
    		    	q.offer(new int[]{
     nextx,nexty});
    		    	res[nextx][nexty]=0;
    		    }
    		}
    		step++;
    	}
    	for(int i=1;i<=r;i++){
     
    		for(int j=1;j<=c;j++){
     
    			System.out.printf("%-5d",res[i][j]);
    		}
    		System.out.println();
    	}
    }
    
}

你可能感兴趣的:(洛谷,java,bfs,算法,java)