DFS--深度优先搜索--图的邻接矩阵
2016-04-06 14:18
537 查看
# include <stdio.h> # include <malloc.h> # include <memory.h> # define MAX 10 //最大顶点数 typedef struct { char vexs[MAX]; //顶点向量 bool visited[MAX]; //访问标志数组 int arcs[MAX][MAX]; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧数 }MGRAPH,* mgraph; void init_mgraph(mgraph &g) //初始化图 { g = (mgraph)malloc(sizeof(MGRAPH)); g->vexnum = 0; g->arcnum = 0; memset(g->vexs,0,sizeof(char)*MAX); memset(g->visited,false,sizeof(bool)*MAX); //访问标志数组置false ,表示没有被访问 for (int i=0; i<MAX; ++i) { for (int j=0; j<MAX; ++j) { g->arcs[i][j] = 0; } } } void add_vexs(mgraph &g) //增加顶点 { printf ("请输入顶点个数\n"); scanf ("%d",&(g->vexnum)); printf ("请输入各个顶点的信息\n"); for (int i=0; i<g->vexnum; ++i) { scanf (" %c",&(g->vexs[i])); } } void add_arcs(mgraph &g) //增加边 { printf ("请输入边的个数\n"); scanf ("%d",&(g->arcnum)); char ch1,ch2; int row,col; printf ("请输入边的信息\n"); for (int i=0; i<g->arcnum; ++i) { scanf (" %c %c",&ch1,&ch2); for (int j=0;j <g->vexnum; ++j) { if (g->vexs[j] == ch1) row = j; if (g->vexs[j] == ch2) col = j; } g->arcs[row][col] = 1; g->arcs[col][row] = 1; //无向图加上此行 } } void creat_mgraph(mgraph &g) //创建图 { add_vexs(g); add_arcs(g); } void print_mgraph(mgraph &g) //遍历输出图 { int i,j; printf (" "); for ( i=0; i<g->vexnum ; ++i) printf ("%3c",g->vexs[i]); printf ("\n"); for (i=0; i<g->vexnum; ++i) { printf ("%3c",g->vexs[i]); for (j=0; j<g->vexnum; ++j) { printf ("%3d",g->arcs[i][j]); } printf ("\n"); } printf ("\n"); } void visit(mgraph &g,int i) //访问结点 { printf ("%3c",g->vexs[i]); g->visited[i] = true; //标志数组置true,表示已经访问 } void DFStraverse(mgraph &g,int i) //深度优先搜索 { visit(g,i); //从第i个顶点开始搜索 for (int j=0; j<g->vexnum; ++j) { if (g->arcs[i][j] && !g->visited[j]) DFStraverse(g,j); } } int main (void) { mgraph g; init_mgraph(g); creat_mgraph(g); print_mgraph(g); DFStraverse(g,0); return 0; }
相关文章推荐
- DFS--深度优先搜索--图的邻接矩阵
- JAVA【倒计时1分钟】
- Java内存模型和多线程基础
- 什么是OAuth的授权?
- asp.net 获取当前网址url
- Python Twisted系列教程14:Deferred用于同步环境
- 关于checkbox的一些问题
- Python 练习册,每天一个小程序(0006)
- 在R中运行Spark
- hibernate mysql写入中文乱码
- iOS -NSURLCache内存缓存
- arma::mat与cv::Mat转换
- asp.net 获取系统字体
- Coherence-Enhancing Shock Filters(附源码)
- tomcat
- 变更、安全管理
- 【unity小技巧之二】使用unity3d调用命令行工具
- c++ 小项目 大数四则运算(整数)
- NUCLEO-L476RG开发板学习笔记汇总
- Linux下打印调试信息