资源简介
全国交通咨询模拟c语言版。。。。。。。全国交通咨询模拟c语言版全国交通咨询模拟c语言版全国交通咨询模拟c语言版全国交通咨询模拟c语言版。
代码片段和文件信息
#include
#include
#define MAX 10 //最大顶点数
#define EDGESMAX 999999 //边最大权值
/**************结构体*****************/
struct city //城市结构体,包括城市名字以及城市在图中的编号
{
int Number;
char Name[10];
};
struct stone //图的存储结构
{
int vexs[MAX]ne; //顶点表顶点数,边数
int distancedge[MAX][MAX]timedge[MAX][MAX]costedge[MAX][MAX]; //邻接矩阵分别是距离时间费用
};
/************函数声明******************/
void PRINT(struct stone *g);
//全局变量被CreatGraph()PRINT()等函数调用..........................
struct city Cit[MAX];
/**********版权展示原创程序[软件都会有版权信息吧嘿嘿]************/
void CopyRight()
{
printf(“o(∩_∩)o...o(∩_∩)o...o(∩_∩)o...o(∩_∩)o...\n\n“);
printf(“\t欢迎使用STONE[磐石]交通咨询系统\n“);
printf(“\n\t指导老师:夏铭 张曙光 程序编写:李乐\n“);
printf(“\n\t绝对原创版权所有拒绝拷贝抄袭..\n“);
printf(“\n o(∩_∩)o...o(∩_∩)o...o(∩_∩)o...o(∩_∩)o...“);
system(“PAUSE“);
}
//根据城市名字取其序号序号取其名字对于一个大型的城市网络图来说必须输入名称对应序号而不可能让用户输入序号
int GetCityNum(char cityname[]) //城市 名字->序号
{
for(int i=0;i {
if(strcmp(Cit[i].Namecityname)==0)
return(Cit[i].Number);
}
printf(“您输入的城市名称\“%s\“有错误\n“cityname);
return -1;
}
char *GetCityName(int i)//城市 序号->名字
{
if(i<0||i>MAX)
{
printf(“参数越界,发生错误了!“);
exit(-1); //0正常退出其他为非正常退出此处无所谓
}
return Cit[i].Name;
}
/************[1]邻接矩阵构建有向图*************************/
void CreatGraph(struct stone *g)
{
FILE *fp;
fp=fopen(“c:\\stone.txt““r“);
if(fp==NULL)
printf(“无法打开交通网络图文件!\n“);
else
{
fscanf(fp“%d %d“&(g->n)&(g->e)); //顶点数边数
int i=0j=0;
for(i=0;i<(g->n);i++) //城市顶点,序号和名字
{
fscanf(fp“%d“&(g->vexs[i])); //printf(“%d“(g->vexs[i]));
Cit[i].Number=g->vexs[i]; //printf(“%d“(Cit[i].Number));
fscanf(fp“%s“Cit[i].Name); // printf(“%s“Cit[i].Name);
}
for(i=0;i<(g->n);i++) //初始化邻接矩阵
for(j=0;j<(g->n);j++)
g->distancedge[i][j]=g->timedge[i][j]=g->costedge[i][j]=0;
for(i=0;i<(g->n);i++) //有权图的邻接矩阵读取是否为有向图根据STONE.TXT文件内容而定
for(j=0;j<(g->n);j++) //EDGESMAX=999999距离权值矩阵
fscanf(fp“%d“&(g->distancedge[i][j]));
for(i=0;i<(g->n);i++) //time权值矩阵
for(j=0;j<(g->n);j++)
fscanf(fp“%d“&(g->timedge[i][j]));
for(i=0;i<(g->n);i++) //cost权值矩阵
for(j=0;j<(g->n);j++)
fscanf(fp“%d“&(g->costedge[i][j]));
}
fclose(fp);
}
/*******************[2]Dijkstra[一个顶点到其余顶点]**********************/
void Dijkstra(int nint edges[][MAX]int v0int dist[]int path[]) //顶点书边表矩阵最短路径矩阵路径上一节点矩阵
{
int ijminu;
int *s=(int *)malloc(sizeof(int)*n);
for(i=0;i {
dist[i]=edges[v0][i];
s[i]=0;
if(i!=v0&&dist[i] else path[i]=-1;
}
s[v0]=1;
for(i=1;i {
min=EDGESMAX; //printf(“%d “min);
for(j=0;j<=n;j++)
if(s[j]==0&&dist[j] {
u=j;
min=dist[j];
}
if(min==EDGESMAX) return;
s[u]=1;
for(j=0;j {
if(s[j]==0&&edges[u][j] {
dist[j]=dist[u]+edges[u][j];
path[j]=u;
}
}
}
}
/***********************[3]Floyd[每两顶
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 13355 2009-12-14 19:27 全国交通咨询模拟.cpp
----------- --------- ---------- ----- ----
13355 1
评论
共有 条评论