湘大OJ 神经网络 - XTUOJ
·
url: https://oj.xtu.edu.cn/problem.php?cid=1006&pid=3

样例输入
1
4 3
3 2 4 1
样例输出
1110
1101
1111
1010
解题思路:深度优先搜索。当到达最后一层时,函数会标记 a[i][j] = 1,表示从第一层的第 j 个元素可以到达最后一层的第 i 个元素。
#include<stdio.h>
#include<string.h>
int n, m;
int get_next[110];
//a数组第i行第j列的元素为1,意味着从第一层的第j个元素出发,
//能走到最后一层的第i个元素,为0就走不到
int a[110][110];
//用dfs来模拟走的过程
void dfs(int j, int i, int layer) {
//走到最后一层
if (layer == m) {
//这说明从第一层的第j个元素出发,
//能走到最后一层的第i个元素,记录下来
a[i][j] = 1;
return;
}
dfs(j, get_next[i], layer + 1);
if (get_next[i] > 1) dfs(j, get_next[i] - 1, layer + 1);
}
int main()
{
int t;
scanf("%d", &t);
while(t--) {
memset(a, 0, sizeof(a));
scanf("%d %d", &n, &m);
for (int j = 1; j <= n; j++) {
scanf("%d", get_next + j);
}
//从第一层的第1个元素出发->从第一层的第n个元素出发
for (int j = 1; j <= n; j++) {
dfs(j, j, 1);
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
printf("%d", a[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
更多推荐
所有评论(0)