⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kechengshejidaoyou.c

📁 1) 设计下沙校园平面图
💻 C
字号:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<process.h> //exist
#define max 500
#define   num     50
#define   maxdist 10000



typedef struct graph {            
     int  number;
     char   name[num];
     char   pr[num];
}graph; /*定义结构体存景点代码、名称、简介*/




//最短路径的C语言函数
//s[]代表标志,如果走过该点,则变为1,否则为0
//p[]表示到达该点的最短路径的前一个顶点的数值
//d[]表示记录从指定点到任意点的路程
//c[]表示十个景点的存放的数组
void shortestpath( int c[num][num],int n,int i,int d[num],int p[num])            
{
     int s[num];
     int mindist;
     int j,k,u;
     for(j=0;j<n;j++){
		d[j]=c[i][j];
		 s[j]=0;
		if((d[j]<maxdist)&&(d[j]!=0))
			p[j]=i;
		else
			p[j]=-1;
     }
		 s[i]=1;
		for(j=0;j<n-1;j++)
		{
           mindist=maxdist;
           u=i;
			for(k=0;k<n;k++)
				if((s[k]==0)&&(d[k]<mindist))
				{
					u=k;
					mindist=d[k];
				}
			s[u]=1;
			for(k=0;k<n;k++)
				if(s[k]==0)
					if((d[u]+c[u][k])<d[k])
					{
						d[k]=d[u]+c[u][k];
						p[k]=u;
					}
      }
}

 //输出最短路径和最短距离函数
void input(int v,int n,int d[],int p[])                        
{
      int i,pre;
	  
      for(i=0;i<n;i++)
		if(i!=v){
			printf("\n%d",i);
			pre=p[i];
			while(pre!=-1){
					printf("<--%d",pre);  //输出最短路径所经过的景点
					pre=p[pre];
			}
			if(d[i]==maxdist)
				printf("<--%d",v);
			printf("\tshortestway:%d",d[i]);//输出最短距离
      }
			
}


main()                                                     
{
     graph   pl[10]={{0,"classroom","selfstudy and teach"},{1,"playground","sand and grass"},
      {2,"experiment","act yourself"},{3,"teaching building","teaching sth in the room"},
      {4,"library","borrow books"},{5,"gate","shool gate"},
      {6,"stadium","playing balls"},{7,"life-centre","service center"},
      {8,"super market","buy sth you want"},{9,"camera room","seeing movies"}};//景点名称和简介
    
	 int i,j,n=10;
     int d[num],p[num],a[num][num];

    for(i=0;i<n;i++){                                        //给景点之间的路径赋最大值
       for(j=0;j<n;j++)
            a[i][j]=maxdist;
     }
	 a[0][1]=20;a[0][2]=30;a[0][5]=40;a[1][4]=40;a[1][5]=60;a[1][6]=30;                               /*景点之间的路径长度*/     
     a[2][3]=35;a[2][7]=40;a[3][8]=15;a[3][9]=20;a[4][8]=35;a[4][9]=30;
	 a[5][2]=20;a[5][8]=45;a[6][0]=70;a[7][0]=50;a[8][9]=20;a[9][1]=55;
     printf("首先请看学校的十个景点\n");
     printf("\n");
	 printf("************************************************************************\n");
	 printf("0-->classroom  1-->playground  2-->experiment  3-->teaching building\n");
     printf("\n");
     printf("4-->library    5-->gate        6-->stadium     7-->life-centre\n");
     printf("\n"); 
	 printf("8-->super market               9--> camera room\n");
     printf("************************************************************************\n");
	 printf("\n");
	 printf("请看路径长度的描述--\n");
	 printf("\n");
     printf("************************************************************************\n");
     for(i=0;i<n;i++){
		 for(j=0;j<n;j++){
			 if(a[i][j]!=maxdist)
			     printf("%d --> %d =%d   ",i,j,a[i][j]);
		  
		 }
			  printf("\n");
			  
	  }
	 printf("其他路径不存在或者隔得很远\n");
     printf("************************************************************************\n");	 
	 printf("\n");
	 printf("想知道关于,请按a\n");
     printf("\n");
	 printf("想知道景点简介,请按i\n");
     printf("\n");
     printf("想知道某一点到其他景点的最短路径,请按v\n");
     printf("\n");
     printf("\n");

      
     do                                                          //循环输入字符进行操作
     {                                                               
        switch(getchar()){                                       //switch语句判断要进行的操作                                                  
              case'a':{                                           
                   printf("This is a guide map that can tell you the shortest path from one place to       another one\n");
                   printf("design  time:2007 1.18\n");
				   printf("\n");
				   printf("想知道关于,请按a\n\n想知道景点简介,请按i\n\n想知道某一点到其他景点的最短路径,请按v\n");
				}break;
              case'i':{                                             //输入景点代码查景点名称和简介
                   while(1){
                        printf("input number 0->9: \n");
                        printf("如果想退出,请按 <0||>9 的数\n");
                        scanf("%d",&i);
                        if(i<0||i>9){
							printf("不存在该景点!\n");
							printf("\n");
							printf("想知道关于,请按a\n\n想知道景点简介,请按i\n\n想知道某一点到其他景点的最短路径,请按v\n");
							break;  
						}                                  //输入非0->9退出
                        printf("%s,%s\n",pl[i].name,pl[i].pr);
				   }
				}break;
              case'v': {                                          //输入景点代码查到其它景点的最短距离
		           do{
			           printf("\ninput  the number:(0-9):   \n"); 
					   printf("如果想退出,请按 <0||>9 的数\n");
                       scanf("%d",&i);
                       if(i<0||i>9){                           //输入非0->9退出                  
                          printf("该景点不存在!\n");
						  printf("\n");
						  printf("想知道关于,请按a\n\n想知道景点简介,请按i\n\n想知道某一点到其他景点的最短路径,请按v\n");
                          break;
					   }
                       shortestpath(a,n,i,d,p);
                       printf("\n\n所有的最短路径分别为:\n");
                       input(i,n,d,p); 
				   } while(1);
				}break;
             default: exit(1);                                       //非正常字符退出
		}
	 }while(getchar());
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -