图的链式存储以及遍历各种操作
来源:互联网 发布:apache flink 安装 编辑:程序博客网 时间:2024/05/21 19:28
CodeBlocks编写
#include<bits/stdc++.h>using namespace std;struct LinkNode{ int data; LinkNode *next;};struct node{ int num; LinkNode *first; int sum;};void chushihua(node* L,int n); //初始化void creatY(node* L,int n,int m); //创建有向图void creatW(node* L,int n,int m); //创建无向图void add(node &LL,int to); //把节点添加到图中区void out(node *L,int n); //输出图void du(node *L,int n); // 有向图的度void dfs(node *L,int i,int n,int *flag); //深度优先搜索遍历无向图void bfs(node *L,int n,int *flag); //广搜遍历无向图int main(){ printf("有向图及无向图的操作\n"); int ny,my,nw,mw; printf("建立有向图,请输入节点个数n和边数m\n"); scanf("%d%d",&ny,&my); printf("请输入m条边对应邻接点\n"); node LY[ny+1]; chushihua(LY,ny); creatY(LY,ny,my); printf("建立无向图,请输入节点个数n和边数m\n"); scanf("%d%d",&nw,&mw); node LW[nw+1]; printf("请输入m条边对应邻接点\n"); chushihua(LW,nw); creatW(LW,nw,mw); printf("\n有向图邻接表为 \n"); out(LY,ny); printf("有向图各个顶点的度为 \n"); du(LY,ny); printf("\n"); printf("有向图邻接表为 \n"); out(LW,nw); int flag[nw+1]; for(int i=1;i<=nw;i++) flag[i]=0; printf("无向图深度优先搜索遍历顺序如下\n"); for(int i=1;i<=nw;i++) { if(!flag[i]) { printf("%d ",i); flag[i]=1; dfs(LW,i,nw,flag); } } for(int i=1;i<=nw;i++) flag[i]=0; printf("\n无向图广度优先搜索遍历顺序如下\n"); bfs(LW,nw,flag); free(flag); return 0;}void chushihua(node* L,int n){ int i=0; for(i=1;i<=n;i++) { L[i].num=i; L[i].first=NULL; L[i].sum=0; }}void creatY(node* L,int n,int m){ int i,from,to; for(i=1;i<=m;i++) { scanf("%d%d",&from,&to); add(L[from],to); }}void creatW(node* L,int n,int m){ int i,from,to; for(i=1;i<=m;i++) { scanf("%d%d",&from,&to); if(from==to) add(L[from],to); else { add(L[from],to); add(L[to],from); } }}void add(node &LL,int to){ LinkNode *p,*q; q = (LinkNode *)malloc(sizeof(LinkNode)); q->data=to; q->next=NULL; p=LL.first; LL.sum++; if(LL.first==NULL) { LL.first=q; return; } while(p->next) { p=p->next; } p->next=q;}void out(node *L,int n){ int i; for(i=1;i<=n;i++) { LinkNode *p=L[i].first; printf("与%d邻接的有 ",i); while(p) { printf("%d ",p->data); p=p->next; } printf("\n"); } printf("\n");}void du(node *L,int n){ int i; for(i=1;i<=n;i++) { printf("%d的度为 %d\n",i,L[i].sum); }}void dfs(node *L,int i,int n,int *flag){ LinkNode *p=L[i].first; if(p==NULL) return; while(p) { if(!flag[p->data]) { printf("%d ",p->data); flag[p->data]=1; dfs(L,p->data,n,flag); } p=p->next; }}void bfs(node *L,int n,int *flag){ int l,r; l=0; int Queue[2*n+1]; Queue[0]=1; flag[1]=1; r=1; while(l<r) { LinkNode *p=L[Queue[l]].first; printf("%d ",Queue[l]); while(p) { if(!flag[ p->data ]) { flag[p->data]=1; Queue[r++]=p->data; } p=p->next; } l++; }}
0 0
- 图的链式存储以及遍历各种操作
- 图的存储以及遍历
- 队列的链式存储操作
- 二叉树的链式存储,先序建树,以及4种遍历方式
- 各种图的创建以及广度,深度优先遍历(临接矩阵存储)
- 二叉树-链式存储的遍历
- 树的链式存储,及前序中序后序遍历
- 图的链式存储
- 严蔚敏 数据结构 二叉树链式存储结构 遍历等操作
- 栈的链式存储结构以及实现
- 链式存储无向图的基本操作
- 串的链式存储的基本操作
- 栈的链式存储结构与操作
- 队列的链式存储结构与操作
- 集合的链式存储及操作实现
- 栈的链式存储结构与操作
- 队列的链式存储结构与操作
- 数据结构 串(链式存储)的基本操作
- 专题三 · 1014
- 数值分析之直接法解线性方程组:高斯消去法、高斯乔丹消去法
- 看黑马安卓基础教学视频总结(广播)
- C++工厂类和单例模式的结合使用
- C语言中可变参数的用法!
- 图的链式存储以及遍历各种操作
- Android——Android实现多级菜单联动操作
- #include的两种区别
- HDOJ/HDU 1075 What Are You Talking About(字符串查找翻译~Map)
- 设置TextView可以被点击
- ReactNative(四)——TouchableHighlight、TouchableOpacity(按钮控件)的基本使用
- 网络与通信:网络其他问题
- 如何指定进程运行的CPU
- Win7上Maven环境的搭建