AcWing 756. 蛇形矩阵dfs解法
原题链接
简单
作者:
绿树红花
,
2024-09-14 18:04:47
,
所有人可见
,
阅读 8
dfs写法需要注意的是优先级,当既可以向右又
可以向上的时候,我们优先选择向上而不是向右,
这个是优先级的特例,我们需要进行特判。
import java.util.Scanner;
public class Main{
static int n,m;
static int[][] a=new int[110][110];
static boolean check(int x,int y)
{
if(x<0||y<0||x>=n||y>=m) return false;
if(a[x][y]>0) return false;
return true;
}
static void dfs(int x,int y,int indx){
int[] dx={0,1,0,-1}; //右下左上的规矩
int[] dy={1,0,-1,0};
if(check(x-1,y)&&check(x,y+1)){ //当可以向右边也可以向上边的时候我们优先向上
a[x-1][y]=indx+1;
dfs(x-1,y,indx+1);
}
else{
for(int i=0;i<4;i++){
int xx=x+dx[i],yy=y+dy[i];
//if(x==2&&y==0) System.out.println(xx+" "+yy);
if(check(xx,yy)){
a[xx][yy]=indx+1;
//System.out.println(x+" "+y+"---"+xx+" "+yy);
dfs(xx,yy,indx+1);
}
}
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
a[0][0]=1;
dfs(0,0,1);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
System.out.printf("%d ",a[i][j]);
System.out.println("");
}
}
}