解题思路:
注意事项:
参考代码:
import java.util.Scanner; public class Main { public static int n; public static int [] brr2 = new int [121]; public static int [] crr2 = new int [121]; public static Node [] Path = new Node [121]; public static int [][] arr =new int [121][121]; public static int [][] vis =new int [121][121]; public static int [] xx = {-1,1,0,0}; public static int [] yy = {0,0,1,-1}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); for(int i = 0; i < n; i++){ crr2[i] = sc.nextInt(); } for(int i = 0; i < n; i++){ brr2[i] = sc.nextInt(); } int num = 0; for(int i =0; i < n; i++){ for(int j = 0; j < n; j++){ arr[i][j] = num++; } } vis[0][0] =1; DFS(0, 0,0); } public static void DFS(int a, int b, int step){ if(a == n - 1&&b == n -1){ int [] brr = new int [121]; int [] crr = new int [121]; brr[0]=1; crr[0]=1; for(int i = 0; i < step; i++){ brr[Path[i].x]++; crr[Path[i].y]++; } int i; for(i = 0; i < n;i++){ if(crr[i]!=crr2[i]||brr[i]!=brr2[i]){ break; } } if(i == n){ System.out.print("0 "); for(int k = 0; k < step; k++){ System.out.print(arr[Path[k].x][Path[k].y]+" "); } } } else{ for(int i = 0; i < 4; i++){ int zx = a + xx[i]; int zy = b + yy[i]; if(zx>=0&&zx<n&&zy>=0&&zy<n&&vis[zx][zy]==0){ vis[zx][zy] =1; Path[step] = new Node(zx,zy); DFS(zx, zy, step+1); vis[zx][zy]=0; } } } } } class Node{ int x; int y; public Node(int x, int y){ this.x=x; this.y=y; } }
0.0分
0 人评分
三角形 (C++代码)递归(存在大量重复计算,容易出现时间超限)浏览:777 |
【金明的预算方案】 (C++代码)浏览:938 |
IP判断 (C语言代码)浏览:762 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:469 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:2092 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:655 |
1113题解浏览:784 |
1013题解浏览:553 |
蚂蚁感冒 (C语言代码)浏览:768 |
Hello, world! (C语言代码)浏览:824 |