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

📄 校园导游咨询程序.txt

📁 校园导游咨询 C++程序 用于查询校园景点最短路径
💻 TXT
字号:
#include<stdio.h> 
#include<stdlib.h>

#define INT_MAX 20000

int shortest[10][10];
int path[10][10];

typedef struct 
{
	int adj;
}ArcCell;

typedef struct 
{
	int number;
	char *name;
	char *imformation;
}Arctex;

typedef struct 
{
  Arctex arcvex[10];
  ArcCell arcs[10][10];
}Graph;

typedef struct BiTNode
{
	int data;
	struct BiTNode *lchild;
	struct BiTNode *rchild;
}BiTNode,*BiTree;

void initGraph(Graph &G)
{
	for(int i=0;i<=10;i++)
		for(int j=0;j<=10;j++)
			G.arcs[i][j].adj=INT_MAX;
}

void Creatgraph(Graph &G)
{
	for(int i=0;i<=10;i++)
		G.arcvex[i].number=i;
	G.arcvex[0].name="学校南大门";
    G.arcvex[0].imformation="建筑宏伟,长一百多米,为各大院校之首";
	G.arcvex[1].name="第一教学楼";
    G.arcvex[1].imformation="我校第一学院->计算机学院就位列其中,绝对是人才的集中地";
	G.arcvex[2].name="行政楼";
    G.arcvex[2].imformation="我校高级领导全数在内,就连财务处也身居其中,可谓我校精华所在";
	G.arcvex[3].name="第三教研楼";
    G.arcvex[3].imformation="同学上机学习的地方,内有百台计算机,是培育人才的摇篮";
	G.arcvex[4].name="篮球场";
    G.arcvex[4].imformation="同学们最喜欢的体育锻炼场所";
	G.arcvex[5].name="田径场";
    G.arcvex[5].imformation="跑道、篮球场、足球场,单干……应有尽有";
	G.arcvex[6].name="文化活动中心";
    G.arcvex[6].imformation="一个让同学们忘记愁累的地方,是不可缺少的娱乐休闲中心";
	G.arcvex[7].name="体育馆";
    G.arcvex[7].imformation="想看浙江万马VS浙江广厦的德比篮球赛吗,那就来吧!";
	G.arcvex[8].name="综合楼";
    G.arcvex[8].imformation="如果你生病了怎么办?综合楼为你提供最舒适的服务,让你立刻好起来";
	G.arcvex[9].name="图书馆";
    G.arcvex[9].imformation="它是知识的殿堂,它是学术的领地,它是同学们最最喜欢的";
     
    G.arcs[0][1].adj=G.arcs[1][0].adj=50;
    G.arcs[0][2].adj=G.arcs[2][0].adj=50;
    G.arcs[1][2].adj=G.arcs[2][1].adj=50;
    G.arcs[1][3].adj=G.arcs[3][1].adj=20;
    G.arcs[2][4].adj=G.arcs[4][2].adj=60;
    G.arcs[3][4].adj=G.arcs[4][3].adj=80;
    G.arcs[3][5].adj=G.arcs[5][3].adj=150;
    G.arcs[3][6].adj=G.arcs[6][3].adj=100;
    G.arcs[3][9].adj=G.arcs[9][3].adj=60;
    G.arcs[4][7].adj=G.arcs[7][4].adj=20;
    G.arcs[5][6].adj=G.arcs[6][5].adj=30;
    G.arcs[6][8].adj=G.arcs[8][6].adj=30;
    G.arcs[6][9].adj=G.arcs[9][6].adj=40;
    G.arcs[7][9].adj=G.arcs[9][7].adj=40;
    G.arcs[8][9].adj=G.arcs[9][8].adj=30;
}

void search(Graph G)              
{
    int a;
    printf("您想查询哪个景点的详细信息?请输入景点编号:");
    scanf("%d",&a);
    printf(" ");
    for(int i=0;i<=10;i++)
		if(G.arcvex[i].number==a)
		{
			printf("%s\n",G.arcvex[i].name);
		       printf("%s\n",G.arcvex[i].imformation);
		}

		  
}

void floyed(Graph &G)                         //用floyed算法求两个景点的最短路径
{
    int i,j,k;
	
    for(i=0;i<10;++i) 
        for(j=0;j<10;++j) 
        {
            shortest[i][j]=G.arcs[i][j].adj;
            path[i][j]=-1; 
        }
     for(k=0;k<10;++k) 
        for(i=0;i<10;++i) 
            for(j=0;j<10;++j)
                if(shortest[i][k]+shortest[k][j]<shortest[i][j]) 
                {
                    shortest[i][j]=shortest[i][k]+shortest[k][j];
                       path[i][j]=k;
                          path[j][i]=k;
                } 
}

void Greatbitree(BiTree &T,int i,int j)
{

	if(path[i][j]!=-1)
	{
		//if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))exit(-1);
		T=(BiTNode *)malloc(sizeof(BiTNode));
		Greatbitree(T->lchild,i,path[i][j]);
		T->data=path[i][j];
		Greatbitree(T->rchild,path[i][j],j);
	}
	else
		T=NULL;
}

void printtree(BiTree &T,Graph G)
{
	if(T!=NULL)
	{
		printtree(T->lchild,G);
		printf("%s->",G.arcvex[T->data].name);
		printtree(T->rchild,G);
	}
}

void display(Graph G,int i,int j)
{
	BiTree T=NULL;
	if(path[i][j]!=-1)
	{
	  Greatbitree(T,i,j);
	  printtree(T,G);
	}
	else
		printf(" ");
}


void shortestdistance(Graph G)        //要查找的两景点的最短距离
{
    int i,j; 
    printf("请输入要查询的两个景点的编号(1->10):");
    scanf("%d %d",&i,&j);

   if(i>9||i<0||j>9||j<0)
    {
        printf("输入信息错误! ");
        printf("  请输入要查询的两个景点的编号: \n");
        scanf("%d,%d",&i,&j);
    }
    else
   {
        floyed(G);
		printf("*****************************************请看***********************************");
		printf("由%s到%s的最短路径的距离是: %d米\n",G.arcvex[i].name,G.arcvex[j].name,shortest[i][j]);
		printf("由%s到%s的最短路径是:",G.arcvex[i].name,G.arcvex[j].name);
		printf("%s->",G.arcvex[i].name,i);
        display(G,i,j);
		printf("%s\n",G.arcvex[j].name);
			printf("*******************************************************************************");
    }
}

void message()
{
	printf("----------------------------欢迎杭州电子科技大学导游系统!-----------------------");
        printf("1.景点信息查询………请按 1 ");
        printf("2.景点最短路径查询…请按 2 ");
        printf("3.退出系统……………请按 0 \n");
        printf("学校景点列表:   \n");
		printf("0:学校南大门    ");
        printf("1:第一教学楼    ");
        printf("2:行政楼        ");
        printf("3:科技教学楼    ");
        printf("4:篮球场        ");
        printf("5:田径场        ");
        printf("6:文化活动中心  ");
        printf("7:体育馆        ");
        printf("8:综合楼        ");
        printf("9:图书馆        \n");

}

int main() 
{
	Graph G;
	initGraph(G);
      Creatgraph(G);
	  int k;
	  char ch;
	  bool flag=1;
	  while(flag)
	  {
		message();
        printf("请选择服务:\n");
        scanf(" %d",&k); 
        switch(k) 
        { 
            case 1:
                printf("进入景点信息查询:");
                search(G);
                break; 
            case 2:
                printf("进入最短路径查询:");
                shortestdistance(G);
                break; 
            case 0:
                exit(0); 
            default:
                printf("输入信息错误!");
                break; 
		}
		printf("\n是否继续查询:是,请按y;否,按任意键结束.\n");
		getchar();
		scanf("%c",&ch);
		if(ch=='y')
		   flag=1;
		else
			flag=0;
	  }
	return 0;
}

⌨️ 快捷键说明

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