DFS--深度优先搜索--图的邻接表表示
来源:互联网 发布:eclipse打印mysql表名 编辑:程序博客网 时间:2024/06/06 00:14
# include <stdio.h># include <malloc.h># include <stdlib.h># include <memory.h># define ok 1# define NULL 0# define MAX 20//最大顶点数 typedef struct ARCNODE{int adjvex;//该边所指的顶点的位置 struct ARCNODE * next;//指向下一条边的指针 // int weight;//有向图边的权}arcnode,* node;//表的节点 typedef struct VNODE{char data;//顶点信息 node firstarc;//指向第一条依附该顶点的边的弧指针}vnode,adjlist[MAX];//头结点 typedef struct algraph{adjlist vertices;int visited[MAX];//访问标志数组 int vexnum,arcnum;//图的当前顶点数和弧度 }mgraph;void init_mgraph(mgraph &g) //初始化图 {memset(g.visited,0,sizeof(int)*MAX);//访问标志数字置0,表示没有被访问 //for (int i=0;i<MAX;++i)//g.visited[i] = 0;g.vexnum = 0;g.arcnum = 0;}int locatevex(mgraph &g,char v)//查找顶点v在顶点向量中的位置 {int i;for (i=0; v!=g.vertices[i].data && i<g.vexnum; ++i);if (i>=g.vexnum)return -1;return i;}void add_vex(mgraph &g)//增加节点 {printf ("请输入无向图的顶点数\n");scanf ("%d",&g.vexnum);printf ("输入顶点信息:\n");for (int i=0;i<g.vexnum;++i){scanf (" %c",&g.vertices[i].data);//构造顶点向量 g.vertices[i].firstarc = NULL;}}void add_arc(mgraph &g)//增加边 {node s,t;printf ("请输入无向图的边数\n");scanf ("%d",&g.arcnum);char ch1,ch2;printf ("输入信息\n");for (int k=0; k<g.arcnum; ++k){scanf (" %c %c",&ch1,&ch2);int i = locatevex(g,ch1);int j = locatevex(g,ch2);//确定v1,v2在g中的位置 s = (node)malloc(sizeof(arcnode));t = (node)malloc(sizeof(arcnode));s->adjvex = j;//该边所指向的顶点的位置为j s->next = g.vertices[i].firstarc;g.vertices[i].firstarc = s;t->adjvex = i;//该边所指向的顶点的位置为i; t->next = g.vertices[j].firstarc;g.vertices[j].firstarc = t;}}void creat_mgraph(mgraph &g)//构造邻接链表 {add_vex(g);//增加节点 add_arc(g);//增加边 }void printadjlist(mgraph &g){int i;node p;printf ("编号 顶点 邻点编号\n");for (i=0;i<g.vexnum;++i){printf (" %d %c ",i,g.vertices[i].data);for (p=g.vertices[i].firstarc;p;p=p->next)printf ("%d ",p->adjvex);printf ("\n");}}void visit(mgraph &g,int i){printf ("%c ",g.vertices[i].data);g.visited[i] = 1;}void DFStraverse(mgraph &g,int i)//深度优化搜索 {//从第i个顶点开始搜索 visit(g,i);node p;for ((p=g.vertices[i].firstarc); p ;(p=p->next))if (!g.visited[p->adjvex])DFStraverse(g,p->adjvex);}int main(void){mgraph g;init_mgraph(g);creat_mgraph(g);printadjlist(g);DFStraverse(g,0);return 0;}
0 0
- DFS--深度优先搜索--图的邻接表表示
- 深度优先搜索DFS——图邻接表表示
- 图的邻接表表示、广度优先、深度优先搜索
- 邻接表表示的深度优先搜索
- 图的邻接表表示及其深度优先搜索实现
- 图的广度优先搜索和深度优先搜索(邻接链表表示)
- 图的广度优先搜索 深度优先搜索 最短路径 拓扑排序(邻接链表表示)
- 图的邻接表表示及深度优先搜索和广度优先搜索 prim求最小生成树
- 邻接表表示的广度优先搜索
- 邻接表的深度优先搜索(DFS)
- 再回首,数据结构——以邻接矩阵、邻接表表示的图的深度、广度优先搜索
- 邻接矩阵,邻接表表示图,深度优先遍历
- 广度优先搜索BFS——图邻接表表示
- 基于邻接表实现的DFS深度优先搜索
- 图的邻接表表示法及深度搜索与广度搜索
- 图的深度优先搜索(邻接表)
- 邻接表图的深度优先搜索
- 无向网的邻接矩阵表和邻接链表表示以及各自的深度优先搜索和广度优先搜索
- 使用内存快照来加速嵌入式系统的启动
- 关于网络请求中无法访问HttpRequestBase
- 蜘蛛牌
- 面试常见问题
- php笔记3 对时间的操作
- DFS--深度优先搜索--图的邻接表表示
- Linux 段错误详解
- linix修改主机名
- 文章标题
- MachineLearning—Logistic Regression(二)
- MongoDB快速学习
- 实对称矩阵的若干性质与详细证明
- 51nod1202(递推)
- 01_用if-else判断年份是否是闰年