图的有关操作
来源:互联网 发布:c 数组赋值 编辑:程序博客网 时间:2024/05/16 00:54
1.键盘输入数据,建立一个有向图的邻接表。
2.输出该邻接表。
3.在有向图的邻接表的基础上计算各顶点的度,并输出。
4.以有向图的邻接表为基础实现输出它的拓扑排序序列。
5.采用邻接表存储实现无向图的深度优先非递归遍历。
6.采用邻接表存储实现无向图的广度优先遍历。
7.在主函数中设计一个简单的菜单,分别调试上述算法。
#include <iostream>#include <vector>#include <string.h>#include <queue>#include <stack>using namespace std;const int N=1000;struct tu1{ vector<int>tu[N]; int n,m; int rd[N],cd[N]; ///入度和出度 void input() { memset(rd,0,sizeof(rd)); memset(cd,0,sizeof(cd)); cout<<"请输入n个点m条边的有向图"<<endl; cout<<"请输入n"<<endl; cin>>n; cout<<"请输入m"<<endl; cin>>m; int x=m; while(x--) { int a,b; cin>>a>>b; tu[a].push_back(b); rd[b]++; cd[a]++; } } void bianli()///遍历图 { cout<<"该图的所有边为:"<<endl; for(int i=1; i<=n; i++) { int l=tu[i].size(); for(int j=0; j<l; j++) cout<<i<<"->"<<tu[i][j]<<endl; } } void getdu()///得到各顶点的度 { for(int i=1; i<=n; i++) cout<<i<<"顶点的入度为"<<rd[i]<<"出度为"<<cd[i]<<endl; } void topu()///拓扑排序 { queue<int>q; for(int i=1; i<=n; i++) if(rd[i]==0) q.push(i); cout<<"拓扑排序顺序是:"<<endl; while(!q.empty()) { int t=q.front(); cout<<t<<' '; q.pop(); int l=tu[t].size(); for(int i=0; i<l; i++) { int to=tu[t][i]; rd[to]--; if(rd[to]==0) q.push(to); } } cout<<endl; }};struct tu2{ vector<int>tu[N]; int n,m; bool vis[N]; void input() { cout<<"请输入n个点m条边的无向图"<<endl; cout<<"请输入n"<<endl; cin>>n; cout<<"请输入m"<<endl; cin>>m; int x=m; while(x--) { int a,b; cin>>a>>b; tu[a].push_back(b); tu[b].push_back(a); } } void dfs()///非递归深搜 { cout<<"非递归深搜序列为:"<<endl; memset(vis,0,sizeof(vis)); stack<int>s; s.push(1); while(!s.empty()) { int t=s.top(); cout<<t<<' '; s.pop(); vis[t]=1; int l=tu[t].size(); for(int i=0; i<l; i++) { int to=tu[t][i]; if(!vis[to]) vis[to]=1,s.push(to); } } cout<<endl; } void bfs()///广搜 { cout<<"广搜序列为:"<<endl; memset(vis,0,sizeof(vis)); queue<int>q; q.push(1); while(!q.empty()) { int t=q.front(); cout<<t<<' '; q.pop(); vis[t]=1; int l=tu[t].size(); for(int i=0; i<l; i++) { int to=tu[t][i]; if(!vis[to]) vis[to]=1,q.push(to); } } cout<<endl; }};int main(){ tu1 A; A.input(); A.bianli(); A.getdu(); A.topu(); tu2 B; B.input(); B.dfs(); B.bfs(); return 0;}
1 0
- 图的有关操作
- 数据结构实验四 图的有关操作
- TreeView的有关操作
- TreeView的有关操作
- TreeView的有关操作
- 有关数据库的操作
- 有关时间的操作
- 有关字符串的操作
- 数据库的有关操作
- 有关bitmap的操作
- 有关flash的操作
- 表的有关操作
- 有关时间的操作
- 有关ROI的操作
- 查找的有关操作
- git的有关操作
- 蓝牙有关的操作
- 有关JSON的操作
- Android主题与样式
- hdu 1575 Tr A(矩阵乘法)
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- 第104讲: Spark Streaming电商广告点击综合案例需求分析和技术架构
- Ubuntu 无线网卡不能使用
- 图的有关操作
- Java中的反射和内省简单实例
- 静态链接库的创建和调用
- Android Broadcast 特点分析
- Java 常用IO流操作详解
- Qt学习笔记之数据库的连接
- 各种界面技术比较
- JavaScript中的一些关键字
- ios如何弄遮罩