1.前言
期末复习算法,第三章讲到了图,所以想将课本中的算法实现。当写完代码的时候才发现这样的复习效率太低了,看书复习是复习,写代码是写代码。不过写完以后还是有点成就感的。
2.参考文献
3.代码实现
#include<iostream>
#include<malloc.h>
using namespace std;
#define maxNum 100 //定义邻接举证的最大定点数
int visited[maxNum];//通过visited数组来标记这个顶点是否被访问过,0表示未被访问,1表示被访问
//图的邻接矩阵表示结构
typedef struct
{
char v[maxNum];//图的顶点信息
int e[maxNum][maxNum];//图的顶点信息
int vNum;//顶点个数
int eNum;//边的个数
}graph;
void createGraph(graph *g);//创建图g
void DFS(graph *g);//深度优先遍历图g
void dfs(graph *g,int i)
//cout<<"顶点"<<g->v[i]<<"已经被访问"<<endl;
cout<<"顶点"<<i<<"已经被访问"<<endl;
visited[i]=1;//标记顶点i被访问
for(int j=0;j<g->vNum;j++)
{
if(g->e[i][j]!=0&&visited[j]==0)
dfs(g,j);
}
}
void DFS(graph *g)
int i;
//初始化visited数组,表示一开始所有顶点都未被访问过
for(i=0;i<g->vNum;i++)
visited[i]=0;
//深度优先搜索
if(visited[i]==0)//如果这个顶点为被访问过,则从i顶点出发进行深度优先遍历
dfs(g,i);
void createGraph(graph *g)//创建图g
cout<<"正在创建无向图..."<<endl;
cout<<"请输入顶点个数vNum:";
cin>>g->vNum;
cout<<"请输入边的个数eNum:";
cin>>g->eNum;
int i,j;
//输入顶点信息
//cout<<"请输入顶点信息:"<<endl;
//for(i=0;i<g->vNum;i++)
// cin>>g->v[i];
//初始画图g
for(j=0;j<g->vNum;j++)
g->e[i][j]=0;
//输入边的情况
cout<<"请输入边的头和尾"<<endl;
for(int k=0;k<g->eNum;k++)
cin>>i>>j;
g->e[i][j]=1;
g->e[j][i]=1;
int main()
graph *g;
g=(graph*)malloc(sizeof(graph));
createGraph(g);
DFS(g);
cin>>i;
return 0;
/*
输入:
正在创建无向图...
请输入顶点个数vNum:10
请输入边的个数eNum:9
请输入边的头和尾
0 1
0 3
1 4
1 5
3 6
4 8
5 2
6 7
8 9
*/
作者:xwdreamer