图论习题及答案

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;
}
posted @ 2022-04-23 23:38  qjc0714  阅读(74)  评论(0)    收藏  举报
html