超简单的深度优先搜索代码

//深度优先搜索测试
//例:
//             1
//           / | \
//          /  |  \
//         2   3---5
//         |
//         |
//         4
//step1:将存储图的方法称为图的*邻接矩阵存储法*
// 通路用1表示,不通用-1表示,自身为0
//      1    2    3    4    5
// 1    0    1    1   -1    1
// 2    1    0   -1    1   -1
// 3    1   -1    0   -1    1
// 4   -1    1   -1    0   -1
// 5   -1   -1    1   -1    0
// step2:构造二维表
const int NUM = 100;
int road[NUM][NUM];			//记录通路
bool book[NUM];				//记录是否已经被访问
void BounTable(int n)		//初始化
	{
		for(int i = 1; i <= n; i++)
			for(int j = 1; j <= n; j++)
				road[i][j] = (i == j) ?  0 : -1;
	}
void RoadSet()				//路径设置
	{
		road[1][2] = road[2][1] = 1;
		road[1][3] = road[3][1] = 1;
		road[2][4] = road[4][2] = 1;
		road[3][5] = road[5][3] = 1;
		road[1][5] = road[5][1] = 1;
	}
void BookSet(int n)			//未访问的节点设置为true,为了防止重复访问
	{
		for(int i = 1; i <= n; i++)
			book[i] = true;
	}
//v当前节点编号;sum累计访问节点个数;n节点总个数
void dfs(int v,int& sum, int& n)	//深度优先搜索
	{
		cout << v <<" ";			//输出当前的节点
		sum++;
		if(sum == n) return;		//若累计访问节点个数等于节点总数,则返回
		for(int i = 1; i <= n; i++)
			{
				if(road[v][i] == 1 && book[i])
					{
						book[i] = false;
						dfs(i,sum,n);	//从当前节点往下访问
					}
			}
	}
//深度优先搜索
void dfsTest()
	{
		int n = 5,sum = 0;
		BounTable(n);
		RoadSet();
		BookSet(n);
		book[1] = false;
		dfs(1,sum,n);
		getchar();
	}

//输出 1 2 4 3 5


猜你喜欢

转载自blog.csdn.net/feengg/article/details/80467394