景点

#include<stdlib.h>
#include<stdio.h>
#include <string.h >

#define INFINITY 9999 /*无穷大*/
#define MAX_VERTEX_NUM 40 /*最多顶点个数*/

typedef struct
{
int adj; //adj定义权值类型
}AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//二维数组存储路径信息

typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介等信息
{

int num;
char name[30]; //景点名称
char introduction[100];//简介
}building;


typedef struct
{
building vexs[MAX_VERTEX_NUM]; //顶点个数
AdjMatrix arcs; //两个顶点的距离
int vexnum, arcnum; //顶点个数,边数
}MGraph;

MGraph c;


MGraph InitGraph(void); //初始化
void Menu(void); //菜单
void quantu(MGraph *G);//全部景点

void lujing(MGraph *G); //两景点之最短
void Search(MGraph *G); //查找
void delet(MGraph *G); //删除
void add(MGraph *G); //添加
void cmd(void); //启动函数

int main(void)
{
cmd();
return 0;
}
/******************************************************/
void cmd(void)
{

int i;
c = InitGraph();
Menu();
scanf("%d", &i);
while (i != 6)
{
switch (i)
{
case 1:quantu(&c); break;

case 2:lujing(&c);break;
case 3:delet(&c);getchar();break;
case 4:system("cls"); Search(&c); Menu(); break;
case 5:add(&c);getchar();break;
case 6:exit(1); break;
default:break;
}
scanf("%d", &i);
}
}
MGraph InitGraph(void) //初始化图
{
MGraph FF;
int i, j;
FF.vexnum = 10;
FF.arcnum = 14;
for (i = 0; i<FF.vexnum; i++)
FF.vexs[i].num = i;
strcpy(FF.vexs[0].name, "第一食堂");
strcpy(FF.vexs[0].introduction, "靠近1区的食堂所以叫第一食堂");
strcpy(FF.vexs[1].name, "第二食堂");
strcpy(FF.vexs[1].introduction, "靠近2区的食堂所以叫第二食堂");
strcpy(FF.vexs[2].name, "第三食堂");
strcpy(FF.vexs[2].introduction, "靠近3区的食堂所以叫第三食堂");
strcpy(FF.vexs[3].name, "第四食堂");
strcpy(FF.vexs[3].introduction, "靠近4区的食堂所以叫第四食堂");
strcpy(FF.vexs[4].name, "晨曦广场");
strcpy(FF.vexs[4].introduction, "学校中心处,四通八达,靠着教学楼");
strcpy(FF.vexs[5].name, "多功能体育馆");
strcpy(FF.vexs[5].introduction, "位于四区地方附近,有两层可供学生锻炼");
strcpy(FF.vexs[6].name, "医务室");
strcpy(FF.vexs[6].introduction, "可以看一些小病痛,还有心理医生");
strcpy(FF.vexs[7].name, "融侨体育中心");
strcpy(FF.vexs[7].introduction, "在这里一般进行大的典礼仪式等等");
strcpy(FF.vexs[8].name, "致远");
strcpy(FF.vexs[8].introduction, "致远,顾名思义特别远,平时大型运动会在这举办");
strcpy(FF.vexs[9].name, "致强");
strcpy(FF.vexs[9].introduction, "致强,顾名思义比较强,所以平时这里的人比较多");

for (i = 0; i<FF.vexnum; i++)
for (j = 0; j<FF.vexnum; j++)
FF.arcs[i][j].adj = INFINITY;
FF.arcs[0][1].adj = 100;
FF.arcs[0][2].adj = 200;
FF.arcs[0][3].adj = 300;
FF.arcs[1][2].adj = 400;
FF.arcs[2][3].adj = 500;
FF.arcs[3][4].adj = 600;
FF.arcs[4][5].adj = 700;
FF.arcs[5][6].adj = 800;
FF.arcs[7][8].adj = 900;
FF.arcs[5][9].adj = 950;
FF.arcs[6][9].adj = 550;
FF.arcs[2][4].adj = 750;
FF.arcs[6][7].adj = 450;
FF.arcs[8][9].adj = 850;

for (i = 0; i<FF.vexnum; i++)
for (j = 0; j<FF.vexnum; j++)
FF.arcs[j][i].adj = FF.arcs[i][j].adj;
return FF;
}
void Menu()
{
printf(" | #〓§〓〓〓〓〓§〓〓〓〓〓〓§〓〓〓〓〓§〓# | \n");
printf("   | ↓     ↓      ↓     ↓ | \n");
printf("   | ☆★☆   ☆★☆    ☆★☆   ☆★☆ | \n");
printf(" | ☆ 导 ☆ ☆ 游 ☆  ☆ 系 ☆ ☆ 统 ☆ | \n");
printf("   | ☆★☆   ☆★☆    ☆★☆   ☆★☆ | \n");
printf(" |  ↓     ↓      ↓     ↓ | \n");
printf(" |  ※     ※      ※     ※ | \n");
printf(" | | \n");
printf(" | 1.浏览校园全景 | \n");
printf(" | 2.各地点路程 | \n");
printf(" | 3.删除路径 | \n");
printf(" | 4.查看景点信息 | \n");
printf(" | 5.添加路径 | \n");
printf(" | 6.退出系统 | \n");
printf(" ——————————————————————————— \n");
printf(" \n");
printf("请输入数字:");
}


void quantu(MGraph *G)
{
int v;

printf("景点景点名称 简介 \n");
for (v = 0; v<G->vexnum; v++)
printf("%-4d%-16s%-56s \n", G->vexs[v].num, G->vexs[v].name, G->vexs[v].introduction);
printf(" ``╭╮ ╭╮ ╭╮ \n");
printf(" \n");
printf(" ``││ ││ │└╮ \n");
printf(" ╭┴┴———————┴┴╮~└—╯ \n");
printf(" │ │ ╭—————╮ \n");
printf(" │ │ ╭—————╮ \n");
printf(" │ │ 哈 │ \n");
printf(" │ ● ● │ ╭╮│ 楼 │ \n");
printf(" │○ ╰┬┬┬╯ ○│o╰╯╰—————╯ \n");
printf(" │ ╰—╯ │ \n");
printf(" │ │ \n");
printf(" ╰——┬o———o┬——╯ \n");
printf(" ╭╮ ╭╮ \n");
printf(" ╰┴————┴╯ \n");

}


void Search(MGraph *G)
{
int j, flag = 1; //flag作为while开关
while (flag)
{
printf("请输入要查询的景点");
scanf("%d", &j);
if (j<0 || j>G->vexnum) //输入景点未被存储的情况下
{
printf("没有");
scanf("%d", &j);
}
if (j >= 0 && j<G->vexnum) //输入的景点被找到了跳出while
flag = 0;
}
printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃编号┃名称 ┃简介 ┃\n");
printf("┃%4d┃%16s┃%56s┃\n", G->vexs[j].num, G->vexs[j].name, G->vexs[j].introduction);
printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}//分别输出查找到的编号名称以及简介。输出vexs的组员


void lujing(MGraph *G)
{
int flag=1;//开关
int j,k;
while (flag)
{
printf("请输入出发点和目的地的编号:");
scanf("%d%d", &k, &j);
if (k<0 || k>G->vexnum || j<0 || j>G->vexnum) //k如果不在范围内
{
printf("景点编号不存在!请重新输入出发点和目的地的编号:");
scanf("%d%d", &k, &j);
}
if (k >= 0 && k<G->vexnum && j >= 0 && j<G->vexnum) //k符合条件
flag = 0;
}
printf("%s", G->vexs[k].name);
printf("到%s", G->vexs[j].name);
printf("距离%dm",G->arcs[k][j]);
}

void delet(MGraph *G){


printf("删除路径,请输入两个景点路径");

int i, j;

scanf("%d,%d", &i, &j);

G->arcs[i][j].adj = 0;
printf("修改结束,请选择下一项");
}

void add(MGraph *c){


printf("添加两条路径");

int i, j,k;

scanf("%d,%d,%d", &i, &j,&k);

c->arcs[i][j].adj = k;
printf("修改结束,请选择下一项");
}

猜你喜欢

转载自www.cnblogs.com/xuexuanlu/p/13198734.html
今日推荐