【图】:有向图中两点间的路径
来源:互联网 发布:网络安全保密协议 编辑:程序博客网 时间:2024/05/22 16:51
Graph_Path.h
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#defineMAXINT 32767
#defineMVNUM 100
typedefstruct
{
char Vexs[MVNUM];
int Arcs[MVNUM][MVNUM];
int vexnum;
int arcnum;
}AMGraph;
staticint visited[MVNUM];
staticchar path[MVNUM];
staticint k=1;
voidCreateGraph(AMGraph &G);
intLocateVex(AMGraph G,char v1);
voidPrint(AMGraph G);
voidDFS(AMGraph G,char v);
voidPath(AMGraph G,char v1,char v2);
Graph_Path.cpp
#include"Graph_Path.h"
voidCreateGraph(AMGraph &G)
{
int i,j,k;
char v1,v2;
int w;
cout<<"请输入顶点个数和弧的个数: ";
cin>>G.vexnum >>G.arcnum ;
cout<<"请输入顶点信息:"<<endl;
for(i=0;i<G.vexnum;i++ )
{
cin>>G.Vexs [i];
}
for(i=0;i<G.vexnum ;i++)
{
for(j=0;j<G.vexnum ;j++)
{
G.Arcs [i][j]=MAXINT;
}
}
cout<<"请输入每条弧的端点和权值"<<endl;
for(k=0;k<G.arcnum ;k++)
{
cin>>v1>>v2>>w;
i=LocateVex(G,v1);
j=LocateVex(G,v2);
G.Arcs [i][j]=w;
}
}
intLocateVex(AMGraph G,char v1)
{
int i;
for(i=0;i<G.vexnum ;i++)
{
if(v1==G.Vexs [i])
return i;
}
return 0;
}
voidPrint(AMGraph G)
{
int i,j,k=0;
for(i=0;i<G.vexnum ;i++)
for(j=0;j<G.vexnum ;j++)
{
if(G.Arcs [i][j]==MAXINT)
cout<<"∞"<<" ";
else
cout<<G.Arcs[i][j]<<" ";
k++;
if(k%G.vexnum ==0)
cout<<endl;
}
}
voidPath(AMGraph G,char v1,char v2)
{
int m,n;
int i,j;
int flag=0;
m=LocateVex(G,v1);
n=LocateVex(G,v2);
for(i=0;i<G.vexnum ;i++)
{
if(G.Arcs [m][i]!=MAXINT)
flag=1;
}
if(flag==0)
cout<<"无路径可以到达!"<<endl;
if(m==n)
{
cout<<"起点和终点都是自身!"<<endl;
}
else
for(i=0;i<G.vexnum ;i++)
{
if(G.Arcs [m][i]!=MAXINT)
{
if(i==n)
{
for(j=1;j<k;j++)
{
cout<<path[j]<<"";
}
cout<<v2<<endl;
}
else
{
path[k]=G.Vexs[i];
k++;
Path(G,G.Vexs[i],v2);
k--;
}
}
}
}
Graph_PathAppTest.cpp
#include"Graph_Path.h"
voidmain()
{
int flag;
char v1,v2;
AMGraph G;
cout<<" 寻找路径"<<endl;
cout<<"1.创建一个图"<<endl;
cout<<"2.寻找图中两点间的路径"<<endl;
cout<<endl;
while(flag)
{
cout<<"输入菜单选项: ";
cin>>flag;
switch(flag)
{
case 1:
CreateGraph(G);
cout<<endl;
cout<<"该有向图是:"<<endl;
Print(G);
cout<<endl;
break;
case 2:
cout<<"输入起点和终点:";
cin>>v1>>v2;
path[0]=v1;
cout<<"由"<<v1<<"开始:";
Path(G,v1,v2);
cout<<endl;
break;
default:
cout<<"输入有误!"<<endl;
break;
}
if(flag==0)
break;
}
}
- 【图】:有向图中两点间的路径
- 快速寻找有向图中两点间的所有路径
- boost graph --- 有向图中两点间所有路径(可处理有环情况)
- 求有向图两点间所有简单路径
- POJ1125 求有向图中两点的最短路径问题
- 在有向图中,判断某条边一定被两点的最短路径经过
- 图论算法-求(有向)图中任意两点间所有路径
- 图论算法-求(有向)图中任意两点间所有路径
- 有向无环图中, 两点间的简单路径数
- 有向有环图两点间路径问题
- 计算无向无权图中两点间所有的最短路径
- 无向连通图中两点间所有路径的算法
- 有向图 两点间的最短距离
- 有向图的传递闭包,两点间最短路径的Floyd算法的变化.
- Matalab代码 实现 Dijkstra求 有向图及无向图之间,任意两点之间的最短路径
- 趣题:奇怪的有向图 任两点间两步之内可达的路径有且仅有一条
- 有向图中两点是否可达
- 搜索无向图中两点之间的所有路径(java)
- JPA
- HDU5443 线段树 + 裸 + 求任意区间最大值
- xtype属性整理
- Maven package war包时,指定本地jar包
- 轮盘赌算法
- 【图】:有向图中两点间的路径
- 通过VBA将excel数据导入至word文档
- 【安卓中的缓存策略系列】安卓缓存之内存缓存LruCache
- Spring MVC 框架搭建及详解
- EF 事务
- 63. Unique Paths II
- android 混淆
- beautifulsoup 安装
- MyBatis学习总结(一)--MyBatis快速入门