标题:课程设计所有顶点最短路径问题,下面是邻接矩阵的建立,请帮忙把弗洛伊德算 ...
只看楼主
小艮
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-12-28
结帖率:0
已结贴  问题点数:20 回复次数:1 
课程设计所有顶点最短路径问题,下面是邻接矩阵的建立,请帮忙把弗洛伊德算法加进去并输出所有顶点最短路径。
请大家帮忙,遇到麻烦问题了,课程设计所有顶点最短路径问题(图的应用)下面是邻接矩阵的建立,请帮忙把弗洛伊德算法加进去并输出所有顶点最短路径。
谢谢帮忙了。
#include<stdio.h>
#include<stdlib.h>

#define max 20 //最多顶点个数
#define infinity 0 //表示极大值
int inf=32767;
int *p;
////////////////////////////////////////////////
typedef enum {DG,DN,UDG,UDN}GraphKind;
//图的种类:有向图,有向网,无向图,无向网
typedef int VertexData;//字符型顶点数据
typedef struct
{
int adj;//无权图用1或0表示,带权图用权值类型
}ArcNode;
typedef struct
{
VertexData vexs[max];//顶点向量
ArcNode arcs[max][max];//邻接矩阵
int vexnum,arcnum;//图的顶点数和弧数
int Graphkind;//图的种类标志
}AdjMatrix;//邻接矩阵


/////////////////////////////////////////////////
//函数声明表
void Print(AdjMatrix *Net);
void Choose(int choice,AdjMatrix *Net);
int CreateDN(AdjMatrix *Net);
int LocateVex(AdjMatrix *Net,VertexData v);
void PrintDN(AdjMatrix *Net);
void Floyed(int cost[][max],int n);
/////////////////////////////////////////////////
//主函数
int main()
{
//定义和初始化
AdjMatrix Net;
Net.vexnum=0;
Net.arcnum=0;
Net.Graphkind;

system("color a");
Print(&Net);
while(true)
{
   printf("Press enter to continue.........");
   getchar();
   getchar();
   system("cls");
   Print(&Net);
}
return 0;
}
///////////////////////////////////////////////////
//菜单函数
void Print(AdjMatrix *Net)
{
int choice;
printf("---------------------\n");
printf("使用说明:本程序可实现邻接矩阵法创建有向网.\n");
printf("---------------------\n");
printf("1.新建一个有向网.\n");
printf("2.输出当前有向网.\n");
printf("3.求图中某顶点的位置.\n");
printf("5.用弗洛伊德算法求最短路径.\n");
printf("4.按其它任意键退出.\n");

printf("---------------------\n");

printf("请选择你要的操作:");
scanf("%d",&choice);
Choose(choice,Net);
}

//////////////////////////////////////////////////
//菜单选择执行函数
void Choose(int choice,AdjMatrix *Net)
{
int temp;
switch(choice)
{
case 1:
   if(CreateDN(Net))
    printf("创建有向网成功!\n");
   else
   {
   
   break;
printf("创建有向网失败\n");
   }se 2:
   PrintDN(Net);
   break;
case 3:
   printf("请输入顶点数据:");
   scanf("%d",&temp);
   printf("该顶点位置为:%d\n",LocateVex(Net,temp));
   break;
case 5:
     p=(int *)Net->arcs;
     Floyed(p,20);  
     break;
default:
   exit(0);
}
}

//////////////////////////////////////////////////
//创建一个有向网
int CreateDN(AdjMatrix *Net)
{
int i,j,k;
int weight;
VertexData v1,v2;
printf("请输入图的顶点数和弧数:");
scanf("%d%d",&Net->vexnum,&Net->arcnum);
//初始化邻接矩阵
for(i=0;i<Net->vexnum;i++)
   for(j=0;j<Net->vexnum;j++)
    Net->arcs[i][j].adj=infinity;
printf("请输入图的顶点:\n");
for(i=0;i<Net->vexnum;i++)
   scanf("%d",&Net->vexs[i]);
printf("请输入一条弧的两个顶点及权值:\n");
for(k=0;k<Net->arcnum;k++)
{
   scanf("%d%d%d",&v1,&v2,&weight);
   i=LocateVex(Net,v1);
   j=LocateVex(Net,v2);
   if(i<0 || j<0)
    return false;
   Net->arcs[i][j].adj=weight;//建立弧
}
return true;
}

////////////////////////////////////////////////////////
//求顶点位置函数
int LocateVex(AdjMatrix *Net,VertexData v)
{
int k;
for(k=0;k<Net->vexnum;k++)
   if(Net->vexs[k]==v){
    return k;
   };
return -1;//没找到,返回-1
}

///////////////////////////////////////////////////////
//输出有向图
void PrintDN(AdjMatrix *Net)
{
int i,j;
printf("顶点:\n");
for(i=0;i<Net->vexnum;i++)
   printf("%d ",Net->vexs[i]);
printf("\n");
printf("邻接矩阵:(0代表无穷大)\n");
for(i=0;i<Net->vexnum;i++){
   for(j=0;j<Net->vexnum;j++)
    printf("%d ",Net->arcs[i][j]);
   printf("\n");
}
}
///////////////////////////////////////////////////////
搜索更多相关主题的帖子: 算法 路径 邻接矩阵 顶点 弗洛伊德 
2009-12-28 13:23
rofor
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:68
专家分:165
注 册:2009-6-12
得分:20 
50帮你搞定. 站内短消息联系.

I'm rofor.
for(;;;);  :-)
RoFoR [AT] YaHoO [DoT] CN
2009-12-28 22:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-294481-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.464809 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved