挑战程序设计竞赛 第十二章 图

图的搜索 :

DFS(深度优先搜索)
BFS(广度优先搜索)
这两种算法对有向图无向图都适用
BFS常用作求最短路径的算法

图的表示

分为邻接表,邻接矩阵两种方法

DFS(12.3)

用递归实现深度优先搜索

#include<iostream>

using namespace std;

const int N = 100;

int m[N][N];
int color[N] , d[N],f[N],tt=0;
int n;

void dfs_v(int u){
	int v;
	color[u] = 1;		//标记为正在走此点
	d[u] = ++tt;
	for(v=1;v<=n;v++){
		if(m[u][v] == 0)	continue;
		if(color[v] == 0){		//如果v点没有走过,进行递归遍历
			dfs_v(v);
		}
	}
	color[u] = 2;				// 2代表此点已经走完
	f[u] = ++tt;

}
void dfs()
{
	int i,u;
	for(i=1;i<=n;i++)	color[i] = 0; //全部初始化为没走过
	for(i=1;i<=n;i++){
		if(color[i] == 0){				//依次进行dfs
			dfs_v(i);			
		}
	}
	for(i=1;i<=n;i++){
		cout << i <<" "<< d[i] <<" " <<f[i] <<endl;
	}

}
int main()
{
	int u,v,k,i,j;
	cin >> n;
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++)	
			m[i][j] = 0;	//全部初始化为0
	}

	for(i=0;i<n;i++){
		cin >> u >>k;
		for(j=0;j<k;j++){
			cin >> v;
			m[u][v] = 1;			//初始化为1
		}
	}

	dfs();
	return 0;
	
}
上一篇:sql分组后取每组前三


下一篇:【Python中matplotlib的使用】