Пример #1
0
void main()
{
	MGraph g;
	int i, j, q = 1;
	PathMatrix p;
	DistancMatrix d;
	char filename[8] = "map.txt";

	CreateFromFile(g, filename, 0);
	for (i = 0; i < g.vexnum; i++)
		g.arcs[i][i].adj = 0;

	ShortestPath_FLOYD(g, p, d);
	while (q) {
		printf("请选择:1 查询  0 结束\n");
		scanf("%d", &q);
		if (q) {
			printf("城市代码:\n");
			for (i = 0; i < g.vexnum; i++) {
				printf("%2d.%-8s", i, g.vexs[i].name);
				if (i % 7 == 6)
					printf("\n");
			}
			printf("\n请输入要查询的起点城市代码 终点城市代码:");
			scanf("%d%d", &i, &j);
			path(g, d, p, i, j);
		}
	}
}
Пример #2
0
int main(int argc,char *argv[])
{
	MGraph G;
	PathMatrix P[MAX_VERTEX_NUM];
	Weight D;

	CreateGraph(G);
	ShortestPath_FLOYD(G,P,D);
	Disply(G,P);
	system("pause");
	return 0;
}
Пример #3
0
 void main()
 {
   MGraph g;
   int i,j,k,q=1;
   PathMatrix p; /* 3维数组 */
   DistancMatrix d; /* 2维数组 */
   printf("数据文件名为map.txt\n");
   CreateFUDN(&g); /* 通过文件构造无向网g
   for(i=0;i<g.vexnum;i++)
     g.arcs[i][i].adj=0; /* ShortestPath_FLOYD()要求对角元素值为0,因为两点相同,其距离为0 */
   ShortestPath_FLOYD(g,p,d); /* 求每对顶点间的最短路径,在func7-2.c中 */
   while(q)
   {
     printf("请选择:1 查询  0 结束\n");
     scanf("%d",&q);
     if(q)
     {
       for(i=0;i<g.vexnum;i++)
       {
         printf("%2d %-9s",i+1,g.vexs[i]);
         if(i%6==5) /* 输出6个数据就换行 */
           printf("\n");
       }
       printf("\n请输入要查询的起点城市代码 终点城市代码: ");
       scanf("%d%d",&i,&j);
       if(d[i-1][j-1]<INFINITY) /* 有通路 */
       {
         printf("%s到%s的最短距离为%d\n",g.vexs[i-1],g.vexs[j-1],d[i-1][j-1]);
         path(g,p,i-1,j-1); /* 求最短路径上由起点城市到终点城市沿途所经过的城市 */
       }
       else
        printf("%s到%s没有路径可通\n",g.vexs[i-1],g.vexs[j-1]);
       printf("与%s到%s有关的p矩阵:\n",g.vexs[i-1],g.vexs[j-1]);
       for(k=0;k<g.vexnum;k++)
         printf("%2d",p[i-1][j-1][k]);
       printf("\n");
     }
   }
 }
Пример #4
0
int main()
{
    struct total ex;  //将文件内容导入
    FILE *fp;
    int j;
    fp=fopen("bus.txt","r");
    if(fp==NULL)
    {
        printf("FILE OPEN ERROR");
        return -1;
    }
    fscanf(fp,"%d",&ex.totalline);

    int i;
    for(i=0; i<ex.totalline; i++)
    {
        fscanf(fp,"%s%d",ex.line[i].linenumber,&ex.line[i].stopcount);
    }
    for(i=0; i<ex.totalline; i++)
    {

        for(j=0; j<ex.line[i].stopcount; j++)
        {

            fscanf(fp,"%s",ex.line[i].station[j].stopname);

        }
    }
    fclose(fp);
    //search(ex);
     Mgraph C;//定义一个图
    int **D;//Dist
    int **P;//用来存储路径
    char s1[30],s2[30];
    int count=0,time=0,n=0,m=0;
    fp=fopen("totalstoptest.txt","r");
    if(fp==NULL)
    {
        printf("FILE OPEN ERROR");
    }
    fscanf(fp,"%d",&C.vexnum);
    count=C.vexnum;
    C.vex=(mvex*)malloc(count*sizeof(mvex));
    C.arc=(int**)malloc((count+1)*sizeof(int));
     for(i=1;i<=count;i++)
   C.arc[i]=(int*)malloc((count+1)*sizeof(int));
   for(i=1;i<=C.vexnum;i++)
   for(j=1;j<=C.vexnum;j++)
    C.arc[i][j]=MAXTIME;//初始化该二维数组的每两个点之间是不连通的,用9999表示该两点之间不连通
    for(i=0; i<count; i++)
    {
        fscanf(fp,"%s",C.vex[i].name);
        C.vex[i].num=i+1;
    }
    fclose(fp);
    fp=fopen("arc.txt","r");
    if(fp==NULL)
    printf("FILE OPEN ERROR");
    fscanf(fp,"%d",&C.arcnum);
    for(i=1;i<=C.arcnum;i++)
    {
        fscanf(fp,"%s%s%d",s1,s2,&time);
        m=getnumByname(s1,C);
        n=getnumByname(s2,C);
        C.arc[m][n]=time;
        C.arc[n][m]=time;
        }
    fclose(fp);
     D=(int**)malloc((count+1)*sizeof(int));
     for(i=1;i<=count;i++)
   D[i]=(int*)malloc((count+1)*sizeof(int));
    P=(int**)malloc((count+1)*sizeof(int));
     for(i=1;i<=count;i++)
   P[i]=(int*)malloc((count+1)*sizeof(int));
    ShortestPath_FLOYD(C,P,D);

    while(1)
    {

        int x;
        system("cls");
        printf("欢迎使用公交查询系统\n");
        printf("1查询经过该站点的路线\n");
        printf("2查询线路\n");
        printf("3查询换乘路线\n");
        //printf("4按站名关键字查询线路\n");
        //printf("5按关键字查询换乘线路\n");
        printf("0退出公交查询系统\n");
        scanf("%d",&x);
        switch(x)
        {
            case 1:search_keyname(C,ex);//按站点名称查询线路
            break;
            case 2:search(ex);//查询线路
            break;
            case 3:exchange_keyname(P,C);
            break;
            case 0:return 0;
            default:printf("序号输入有误,请重新输入\n");
            continue;
        }

    }

    return 0;
}