数据结构C语言版之邻接矩阵(遍历)
来源:互联网 发布:地图 数据可视化工具 编辑:程序博客网 时间:2024/06/05 17:58
//邻接矩阵:#include<stdio.h>#include<stdlib.h>#define MAX_VERTE_NUM 20#define Stack_size 100#define Stackincreament 10int visited[MAX_VERTE_NUM];typedef int AdjMatrix[MAX_VERTE_NUM][MAX_VERTE_NUM];typedef struct{char vex[MAX_VERTE_NUM];AdjMatrix arc;int vexnum,arcnum;}MGraph;typedef struct{int start;int end;}elemtype;typedef struct{elemtype *base;int top;int stacksize;}sqstack;void initstack(sqstack &s){s.base=(elemtype*)malloc(Stack_size*sizeof(elemtype));s.stacksize=Stack_size;if(!s.base)exit(0);s.top=0;}void push(sqstack &s,elemtype e){if(s.top>=s.stacksize){s.base=(elemtype*)realloc(s.base,(Stack_size+Stackincreament)*sizeof(elemtype));if(!s.base) exit(0);s.stacksize+=Stackincreament;}s.base[s.top++]=e;}void pop(sqstack &s,elemtype &e){if(s.top==0)return ;e=s.base[--s.top];}int stackempty(sqstack s){ if(s.top==0)return 1;return 0;}int Locate(MGraph &G,char v){int i=0;for(i=0;i<G.vexnum;i++) if(G.vex[i]==v) return i;return -1;}void CreatGraph(MGraph &G){int m,n,i,j;char v1,v2;printf("请输入图的顶点数和边数:\n");scanf("%d",&G.vexnum);scanf("%d",&G.arcnum);getchar();printf("请输入各个顶点:\n");for(int k=0;k<G.vexnum;k++)scanf("%c",&G.vex[k]);getchar();for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arc[i][j]=0;printf("请输入边: \n");for(k=0;k<G.arcnum;k++){ scanf("%c%c",&v1,&v2);getchar();m=Locate(G,v1);n=Locate(G,v2);G.arc[m][n]=G.arc[n][m]=1;}}void ShowAdjMatrix(MGraph G){for(int i=0;i<G.vexnum;i++){for(int j=0;j<G.vexnum;j++)printf("%3d",G.arc[i][j]);printf("\n");}}int FirstAdjVex(MGraph G,int v){int i;for(i=0;i<G.vexnum;i++)if(G.arc[v][i]==1)return i;return -1;}int NextAdjVex(MGraph G,int v,int w){int j;for(j=w+1;j<G.vexnum;j++)if(G.arc[v][j]==1)return j;return -1;}void DFS(MGraph G,int v){elemtype elem;int w;sqstack s;visited[v]=1;printf("%c",G.vex[v]);initstack(s);w=FirstAdjVex(G,v);while(!stackempty(s)||w>=0){while(w>=0){if(visited[w]==1){w=NextAdjVex(G,v,w);}else{printf("%c",G.vex[w]);visited[w]=1;elem.start=v;elem.end=w;push(s,elem);v=w;w=FirstAdjVex(G,v);}}if(!stackempty(s)){pop(s,elem);v=elem.start;w=elem.end;v=NextAdjVex(G,v,w);}}}void DFStraverse(MGraph G){//递归深度优先遍历int v;for(v=0;v<G.vexnum;v++)visited[v]=0;for(v=0;v<G.vexnum;v++)if(!visited[v])DFS(G,v);}int main(){MGraph G;CreatGraph(G);ShowAdjMatrix(G); DFStraverse(G);printf("\n");return 0;}
0 0
- 数据结构C语言版之邻接矩阵(遍历)
- 数据结构C语言版之邻接表(各种遍历)
- 数据结构(C语言版)规范代码之图(邻接矩阵与邻接表)
- 数据结构与算法(C语言版)__邻接矩阵
- 数据结构之非递归遍历和层次遍历(C语言版)
- 数据结构(C语言版)规范代码之图(邻接多重表遍历)
- 数据结构(c语言版)之顺序表
- 数据结构之单链表(c语言版)
- 数据结构之线性表(C语言版)
- 数据结构之简单排序(C语言版)
- 数据结构(C语言版)
- 数据结构(C语言版)
- 数据结构(C语言版)
- 数据结构 图的遍历 C语言版
- 数据结构之队列(C语言版)
- (c++)数据结构与算法之图:邻接矩阵、深度广度遍历、构造最小生成树(prim、kruskal算法)
- 数据结构(C语言版)总结
- 数据结构c语言版(题目)
- QFileDialog、QColorDialog中英文提示信息翻译方法
- 关于mybatis使用中遇到的问题集合帖(持续更新)
- 使用FEC改善UDP(RTP)音视频传输效果
- 文件操作与模板编程题 #1(C++程序设计第7周)
- Java 8 的 JVM 有多快?Fork-Join 性能基准测试
- 数据结构C语言版之邻接矩阵(遍历)
- 给马小怂写的教程-----微信如何添加表情包
- Activity之间传递Bitmap
- linux 消息队列查看和删除
- 数据结构课程设计源代码
- CSS3伪类选择器
- C语言---基础
- 数据结构C语言版之查找(折半选择快速等)
- nginx浅析--1