原题链接:蓝桥杯2016年第七届真题-路径之谜
解题思路:
注意事项:
参考代码:
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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复