图论习题及答案
A - Graph
例题链接:
https://vjudge.net/contest/490112#problem/A
题目来源:
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_11_A
题目思路:
给你一个无向图的很多串邻接链表,你需要将这些邻接链表转换成邻接矩阵的形式
容易格式错误的地方:
这个题需要注意每一行输出的最后不能有空格
所以需要判一下
题目代码:
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int u[105];
int k[105];
int v[105];
int a[105][105];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>u[i];
cin>>k[i];
for(int j=1;j<=k[i];j++){
cin>>v[j];
a[u[i]][v[j]]=1;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(j==n){
if(a[i][j]){
cout<<"1";
continue;
}
else{
cout<<"0";
continue;
}
}
if(a[i][j]==1){
cout<<"1"<<" ";
}
else{
cout<<"0"<<" ";
}
}
cout<<endl;
}
return 0;
}
B - Depth First Search
题目链接:
https://vjudge.net/contest/490112#problem/B
题目来源:
https://judge.u-aizu.ac.jp/onlinejudge/solution.jsp?pid=ALDS1_11_B
代码:
点击查看代码
#include<bits/stdc++.h>
#define N 100
#define WHITE 0
#define GRAY 1
#define BLACK 2
using namespace std;
int n,M[N][N];
int color[N],d[N],f[N],tt;
void dfs_visit(int u){
int v;
color[u]=GRAY;
d[u]=++tt;
for(v=0;v<n;v++){
if(M[u][v]==0){
continue;
}
if(color[v]==WHITE){
dfs_visit(v);
}
}
color[u]=BLACK;
f[u]=++tt;
}
void dfs(){
int u;
for(int u=0;u<n;u++){
color[u]=WHITE;
}
tt=0;
for(u=0;u<n;u++){
if(color[u]==WHITE){
dfs_visit(u);
}
}
for(u=0;u<n;u++){
printf("%d %d %d\n",u+1,d[u],f[u]);
}
}
int main(){
int u;
int v;
int k;
int i;
int j;
cin>>n;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
M[i][j]=0;
}
}
for(i=0;i<n;i++){
cin>>u>>k;
u--;
for(j=0;j<k;j++){
cin>>v;
v--;
M[u][v]=1;
}
}
dfs();
return 0;
}