原题链接:蓝桥杯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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复