【数据结构】最短路径
来源:互联网 发布:网络四大神书下载 编辑:程序博客网 时间:2024/05/29 03:10
#include<stdafx.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
//自定义结构型邻接矩阵
typedef struct{
intv[3];
}Shortest_Road;
//创建有向图的邻接矩阵(图示给出)
int Creat_Roadgraph(Shortest_Road *V)
{
inti;
for(i=0;i<3;i++)
V[i].v[i]=0;
printf(" 请输入(1)号位置的路径长度:(输入表示不可达)\n");
scanf( "%d",&V[0].v[1]);
printf(" 请输入(2)号位置的路径长度:(输入表示不可达)\n");
scanf( "%d",&V[0].v[2]);
printf(" 请输入(3)号位置的路径长度:(输入表示不可达)\n");
scanf( "%d",&V[1].v[0]);
printf(" 请输入(4)号位置的路径长度:(输入表示不可达)\n");
scanf( "%d",&V[1].v[2]);
printf(" 请输入(5)号位置的路径长度:(输入表示不可达)\n");
scanf( "%d",&V[2].v[0]);
printf(" 请输入(6)号位置的路径长度:(输入表示不可达)\n");
scanf( "%d",&V[2].v[1]);
printf(" 有向图的邻接矩阵创建成功!!!\n");
returnOK;
}
//输出有向图的邻接矩阵及可直达路径
int Print_Roadgraph(Shortest_Road *V)
{
printf(" 有向图的邻接矩阵为: \n\n");
printf(" V V0 V1 V2 \n");
printf(" \n");
printf(" \n");
printf(" V0 0 %d %d \n",V[0].v[1],V[0].v[2]);
printf(" \n");
printf(" \n");
printf(" V1 %d 0 %d \n",V[1].v[0],V[1].v[2]);
printf(" \n");
printf(" \n");
printf(" V2 %d %d 0 \n",V[2].v[0],V[2].v[1]);
returnOK;
}
//输出可达的路径
int print_KDroad(Shortest_Road *V)
{
inti,j,k=0;
printf(" 所有的可直达的路径为:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(V[i].v[j]!=0){printf(" <V%d,V%d>\n",i,j);k++;}
if(k==0)printf(" 无可直达的路径!!!\n");
returnOK;
}
//输出最短路径的邻接矩阵
int print_Shortest_Roadgraph(Shortest_Road *V)
{
inti,j,a,b,n=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(V[i].v[j]==0){V[i].v[j]=100000;n++;if(n==9){printf("一切皆不可达!!!\n");returnOK;}}
for(i=0;i<3;i++)
{a=i+1;
b=i+2;
if(a==3)a=0;
if(b==3)b=0;
if(b==4)b=1;
if(V[a].v[b]>V[a].v[i]+V[i].v[b])V[a].v[b]=V[a].v[i]+V[i].v[b];
if(V[b].v[a]>V[b].v[i]+V[i].v[a])V[b].v[a]=V[b].v[i]+V[i].v[a];
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(V[i].v[j]==100000)V[i].v[j]=0;
printf(" 最短路径的邻接矩阵为: \n");
printf(" V V0 V1 V2 \n");
printf(" \n");
printf(" \n");
printf(" V0 0 %d %d \n",V[0].v[1],V[0].v[2]);
printf(" \n");
printf(" \n");
printf(" V1 %d 0 %d \n",V[1].v[0],V[1].v[2]);
printf(" \n");
printf(" \n");
printf(" V2 %d %d 0 \n",V[2].v[0],V[2].v[1]);
returnOK;
}
//主函数
void main()
{
Shortest_Road *V;
V=(Shortest_Road *)malloc(3*sizeof(Shortest_Road));
intflag=1,select;
printf(" 图示如下(Floyd算法,邻接矩阵,1~6) \n\n");
printf(" V V0 V1 V2 \n");
printf(" \n");
printf(" \n");
printf(" V0 0 (1) (2) \n");
printf(" \n");
printf(" \n");
printf(" V1 (3) 0 (4) \n");
printf(" \n");
printf(" \n");
printf(" V2 (5) (6) 0 \n");
printf("==============================菜单============================\n");
printf("= 1.创建有向图的邻接矩阵(图示给出) =\n");
printf("= 2.输出已创建的邻接矩阵 =\n");
printf("= 3.输出可直达的路径 =\n");
printf("= 4.输出最短路径的邻接矩阵 =\n");
printf("= 5.退出操作 =\n");
printf("===================注意!!!不支持乱序选择===================\n");
while(flag)
{
printf("\n 请选择菜单中的操作选项(第一次必须选择“”创建有向图!):\n");
scanf("%d",&select);
switch(select)
{
case1:
Creat_Roadgraph(V);break;
case2:
Print_Roadgraph(V);break;
case3:
print_KDroad(V);break;
case4:
print_Shortest_Roadgraph(V);break;
case5:
flag=0;break;
default:
printf("您输入的数据有误!!!请重新输入!!!\n");
}
}
}
- 【数据结构】最短路径
- 数据结构---最短路径
- 数据结构-最短路径
- 数据结构 图 最短路径
- 数据结构之 最短路径
- 【数据结构】最短路径_Dijkstra
- 【数据结构】最短路径_Floyd
- 【数据结构】最短路径算法
- 数据结构--最短路径问题
- 数据结构---->图的最短路径
- 数据结构之 最短路径2
- 数据结构-Astar算法-最短路径
- 数据结构-图-最短路径问题
- 数据结构--最短路径(Dijkstra算法)
- 数据结构之最短路径Dijkdtra算法
- 数据结构_7:图算法 :最短路径
- 数据结构之最短路径(DijKstra)
- [数据结构]求解迷宫最短路径问题
- HDU 1029 Ignatius and the Princess IV
- textarea: 保留textarea中的换行,将源样式显示在页面
- 利用NuSoap开发WebService(PHP) 分类: php 2010-09-08 12:00 5832人阅读 评论(1) 收藏 举报 webservicephpsoapstringencod
- APK文件处理
- 33.Oracle数据库SQL开发之 使用简单函数——使用单行函数字符函数
- 【数据结构】最短路径
- 开发随笔 - 常用属性、方法
- 34.Oracle数据库SQL开发之 使用简单函数——使用单行函数数字函数
- Linux学习之命令(文件相关)
- 华为HG8245C光猫破解开启原始管理页面
- Velt中的编译器配置
- 35.Oracle数据库SQL开发之 使用简单函数——使用单行函数转换函数
- 享受编程之美
- 36.Oracle数据库SQL开发之 使用简单函数——使用单行函数正则表达式函数