王梓涵
( 梦幻の幸运使者 qwq)
1
题目
#include <bits/stdc++.h>
using namespace std;
char tre[1005][1005];
int vis[1005];
int n,ans=0;
void dfs(int step,int id);
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>tre[i][j];
if(i==1){
vis[i]=1;
dfs(i,j);
}
}
}
cout<<ans;
return 0;
}
void dfs(int step,int id){
ans=max(ans,step);
for(int i=1;i<=n;i++){
if(vis[i]!=1&&tre[id][i]=='1'){
vis[i]=1;
dfs(step+1,id+1);
}
}
}
为啥不对
1 个赞
王梓涵
( 梦幻の幸运使者 qwq)
6
已知一棵树,有 N 个结点,编号 1 至 N,其中 1 号是根。
求树的深度(根节点的深度为0)。
输入格式:
第一行一个数 N。(1≤N≤1000)
接下来 N 行每行 N 个 1 或 0,第 i 行第 j 列是 1,表示 i,j 两点有边,否则没有边。
输出格式:
树的深度。
样例输入:
10 0110000000 1001000000 1000110001 0100000000 0010000000 0010001000 0000010110 0000001000 0000001000 0010000000
样列输出:
4
1 个赞
王梓涵
( 梦幻の幸运使者 qwq)
10
#include<bits/stdc++.h>
using namespace std;
int cnt[1005][1005],ans[1005],num[1005];//计数 ans
char tre[1005][1005];
int n;
void dfs(int id,int dep);
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>tre[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(tre[i][j]=='1')
cnt[i][j]=1;
cnt[j][i]=1;
}
}
dfs(1,1);
for(int i=1;i<=n;i++){
cout<<num[i]<<' ';
}
return 0;
}
void dfs(int id,int dep){
if(ans[id]){
return;//退
}
ans[id]=1;//顺序不可颠倒
for(int i=1;i<=n;i++){
if(cnt[i][id]&&!ans[i]){
num[id]++;
dfs(i,dep+1);
}
}
}
1 个赞
王梓涵
( 梦幻の幸运使者 qwq)
11
题目描述:
已知一棵树,有 N 个结点,编号 1 至 N,其中 1 号是根。求树的节点孩子数。
输入格式:
第一行一个整数 N。(1≤N≤1000)
接下来 N 行每行 N 个 1 或 0,第 i 行第 j 列是 1,表示 i, j 两点有边,否则没有边。
输出格式:
树的节点孩子数量。
样例输入:
10
0110000000
1001000000
1000110001
0100000000
0010000000
0010001000
0000010110
0000001000
0000001000
0010000000
样列输出:
2 1 3 0 0 1 2 0 0 0
2 个赞