您的位置:首页 > 理论基础 > 数据结构算法

图的有关操作

2016-05-22 17:21 302 查看
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
;
int n,m;
int rd
,cd
; ///入度和出度
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
;
int n,m;
bool vis
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  大二 数据结构