资源描述
一、课程设计目得
本课程设计得目标就就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序得能力,并培养基本得、良好得程序设计技能以及合作能力。
设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密得、规模较大得问题,通过分析、设计、编码、调试等各环节得训练,使学生深刻理解、牢固掌握数据结构与算法设计技术,掌握分析、解决实际问题得能力。
通过这次设计,要求在数据结构得逻辑特性与物理表示、数据结构得选择与应用、算法得设计及其实现等方面,加深对课程基本内容得理解。同时,在程序设计方法以及上机操作等基本技能与科学作风方面受到比较系统与严格得训练。
二、 课程设计内容
1)问题描述
用无向网表示您所在学校得校园景点平面图,图中顶点表示主要景点,存放景点得编号、名称、简介等信息,图中得边表示景点间得道路,存放路径长度等信息.要求能够回答有关景点介绍、游览路径等问题。
2)基本要求
(1) 查询各景点得相关信息;
(2) 查询图中任意两个景点间得最短路径。
(3) 查询图中任意两个景点间得所有路径.
(4) 增加、删除、更新有关景点与道路得信息
三、课程设计过程
1.需求分析
(1)设计学校得校园平面图,选取出若干得具有代表性得景点构成一个抽象得无向带权图,顶点为景点,边得权值代表了景点间路径得长度。
(2)将景点得序号,名称,介绍存放起来准备查询。
(3)提供任意景点得信息;
(4)提供任意经典得路径查询及其最优路线得查询
(5)平面图景点得增加及删除,以及边与权值(长度)得改变
2.概要设计
1:第一点就是主界面得设计,首先,为了该系统各个功能得管理,设计出含有多个菜单项得主菜单界面,可以更方便得使用该系统。
2: 第二点就是存储结构得设计,采取了图结构类型(mgraph)存储校园图得信息,景点信息用结构数组vexs存储,而且利用全局变量:visited[]数组用于存储顶点就是否被访问标志;d[]数组用于存放权值与查找路径顶点得编号;campus就是一个图结构得全局变量。
3: 第三点就是设计各个功能得实现,学校景点得介绍通过函数browsepus()来实现;查询景点间得最段路径通过Floyd(弗洛伊德)算法实现;查询景点间得所有路径通过allpath函数与path函数来实现;更改图得信息可以由主函数changegraph以及其她函数可以实现。
3. 详细设计
(1)主要得操作界面得显示以及无向网操作
void initgraph(graph *ga)
{
int i,j;
ﻩga—>n=9;
ga—>e=11;
for( i=0;i〈ga—>n;i++)
{
ga->vexs[i]、num=i;
}
strcpy(ga-〉vexs[0]、name,”西门”);
ﻩﻩstrcpy(ga->vexs[0]、introduce,"学校得正大门,设有公交站”);
ﻩﻩstrcpy(ga-〉vexs[1]、name,"风雨篮球场");
ﻩﻩstrcpy(ga-〉vexs[1]、introduce,”");
strcpy(ga->vexs[2]、name,”田径场");
ﻩﻩstrcpy(ga->vexs[2]、introduce,”举办运动会,平时体育跑步锻炼等”);
ﻩ strcpy(ga—〉vexs[3]、name,"京元食堂”);
ﻩﻩstrcpy(ga->vexs[3]、introduce,"新食堂");
strcpy(ga—>vexs[4]、name,”苍霞湖畔”);
ﻩstrcpy(ga—〉vexs[4]、introduce,”戏称“分手湖”,景色宜人”);
strcpy(ga—〉vexs[5]、name,"思源楼");
ﻩstrcpy(ga->vexs[5]、introduce,”学校王牌土木得教学区");
ﻩ strcpy(ga-〉vexs[6]、name,”图书馆");
ﻩﻩstrcpy(ga->vexs[6]、introduce,"就是大学城最高得标志性建筑");
ﻩ strcpy(ga—〉vexs[7]、name,"北教区");
ﻩ strcpy(ga—〉vexs[7]、introduce,"北校区集中得教学楼");
ﻩ strcpy(ga-〉vexs[8]、name,”禾堂餐厅");
ﻩ strcpy(ga->vexs[8]、introduce,"旧食堂”);
for(i=0;i<ga—〉n;i++)
for(j=0;j<ga->n;j++)
ga->edges[i][j]=1000;
ﻩﻩga—〉edges[0][1]=1;
ﻩga->edges[1][2]=2;
ﻩ ga->edges[1][3]=5;
ga—〉edges[2][4]=4;
ﻩga—〉edges[3][4]=9;
ﻩﻩga-〉edges[4][5]=1;
ﻩga—〉edges[4][8]=1;
ﻩﻩga->edges[5][6]=5;
ga->edges[5][7]=7;
ﻩﻩga->edges[7][8]=1;
ﻩ ga—>edges[6][7]=9;
for(i=0;i<ga-〉n;i++)
ﻩ for(j=0;j<ga-〉n;j++)
ﻩ ga—〉edges[j][i]=ga-〉edges[i][j];
}
(2)确定顶点就是否存在已经顶点就是否已经被访问过来确定路径
void Create_graph(graph *ga)
{
ﻩint i,j,k,w;
ﻩprintf("请输入顶点数与边数:\n");
ﻩscanf(”%d %d",&(ga-〉n),&(ga-〉e));
ﻩprintf(”请输入景点编号,景点名字,景点介绍,建立信息表:\n");
ﻩfor(i=0;i<ga—>n;i++)
{
ﻩscanf(”%d",&(ga—>vexs[i]、num));
ﻩ gets(ga—〉vexs[i]、name);
ﻩﻩgets(ga—〉vexs[i]、introduce);
}
ﻩ for(i=0;i〈ga-〉n;i++)
for(j=0;j<=ga-〉n;j++)
ﻩ ga—〉edges[i][j]=1000;
for(k=0;k〈ga—〉e;k++)
ﻩ{
ﻩ printf("请输入%d条边得景点序号i,j与长度:",k+1);
ﻩﻩscanf(”%d %d %d”,&i,&j,&w);
ga->edges[i][j]=w;
ﻩga->edges[j][i]=w;
ﻩ}
}
void print(graph ga)
{
int i,j;
for(i=0;i〈ga、n;i++)
ﻩ for(j=0;j<ga、n;j++)
ﻩ {
printf("%d",ga、edges[i][j]);
if(j+1==ga、n)
ﻩ printf("\n");
ﻩ }
}
void visit(graph ga)
{
ﻩint a;
printf("请输入景点编号:”);
scanf("%d”,&a);
int i;
ﻩfor( i=0;i<ga、n;i++)
{
ﻩ if(a==ga、vexs[i]、num)
ﻩ {
printf("景点编号为%d \n",ga、vexs[i]、num);
printf("景点名称为”);
ﻩ puts(ga、vexs[i]、name);
printf("景点介绍为");
ﻩ puts(ga、vexs[i]、introduce);
ﻩ break;
ﻩ }
}
if(i==ga、n)printf(”无此点\n”);
}
(3)得出景点间得最短路径
void shortestpath_djst(graph ga){
}
void shortestpath_floyd(graph ga)
{
int i,j,k,v,u,w,d[35][35],p[35][35][35];
ﻩfor(v=0;v<ga、n;v++)
{
for(w=0;w<ga、n;w++)
ﻩ{
d[v][w]=ga、edges[v][w];
ﻩ for(u=0;u〈ga、n;u++)
ﻩﻩ {
ﻩ p[v][w][u]=0;
ﻩﻩ}
ﻩﻩ if(d[v][w]<1000)
ﻩ {
ﻩ p[v][w][v]=1;
ﻩ p[v][w][w]=1;
ﻩ }
ﻩ}
}
for(u=0;u〈ga、n;u++)
ﻩ{
ﻩﻩfor(v=0;v〈ga、n;v++)
ﻩﻩ for(w=0;w<ga、n;w++)
ﻩ ﻩif(d[v][u]+d[u][w]<d[v][w])
ﻩﻩ ﻩ{
ﻩ ﻩd[v][w]=d[v][u]+d[u][w];
ﻩﻩ for(i=0;i<ga、n;i++)
ﻩﻩ p[v][w][i]=p[v][u][i]||p[u][w][i];
ﻩﻩ ﻩ}
}
ﻩprintf("\n请输入出发点与目得地编号:”);
scanf("%d %d",&k,&j);
printf("\n\n");
ﻩwhile(k<0||k〉ga、n||j<0||j>ga、n)
ﻩ{
printf("\n输入得编号不存在");
printf("\n请重新输入编号:\n\n");
scanf("%d %d”,&k,&j);
printf("\n\n");
}
printf("%s",ga、vexs[k]、name);
ﻩfor(u=0;u<ga、n;u++)
if(p[k][j][u] && k!=u &&j!=u)
ﻩ printf(”——->%s”,ga、vexs[u]、name);
printf(”--->%s",ga、vexs[j]、name);
ﻩprintf("\n\n\n总长度为%d千米\n\n\n",d[k][j]);
}
(4)得到景点之间得所有路径
void path(graph c,int m,int n,int k) {
ﻩ int s,x=0;
ﻩ int t;
t=k+1;
ﻩ if(d[k]==n && k<8)
{
ﻩﻩ for(s=0;s<k;s++)
ﻩﻩ {
ﻩ printf(”%s-—-〉",c、vexs[d[s]]、name);
}
ﻩ printf("%s\n\n”,c、vexs[d[s]]、name);
ﻩ }
else
ﻩ {
ﻩﻩ s=0;
while(s〈c、n)
ﻩ {
ﻩﻩ if((c、edges[d[k]][s]〈1000)&&(visited[s]==0))
ﻩﻩ {
ﻩﻩﻩ visited[s]=1;
ﻩﻩﻩ d[k+1]=s;
ﻩﻩ path(c,m,n,t);
ﻩﻩﻩ visited[s]=0;
ﻩﻩ }
ﻩﻩ s++;
ﻩ }
}
}
void allpath(graph c)
{
int k,i,j,m,n;
ﻩ printf("\n\n请输入您要查询得两个景点得编号:\n\n");
scanf("%d %d”,&i,&j);
ﻩ printf("\n\n");
ﻩ m=locatevex(c,i);
ﻩ n=locatevex(c,j);
ﻩ d[0]=m;
ﻩ for(k=0;k<c、n;k++)
visited[k]=0;
ﻩ visited[m]=1;
path(c,m,n,0);
}
(5)删除边
int delarc(graph &ga) {
int m,n,v0,v1;
if(ga、e〈=0)
ﻩ{
printf("图中已经无顶边,无法删除");
ﻩ return 1;
}
printf("\n请输入要删除得边得起点与终点得编号:”);
ﻩscanf("%d %d",&v0,&v1);
m=locatevex(ga,v0);
ﻩif(m〈0)
ﻩ{
printf("此顶点%d已删除",v0);
ﻩreturn 1;
}
n=locatevex(ga,v1);
ﻩ if(n<0)
{
ﻩprintf("此顶点%d已删除”,v1);
ﻩreturn 1;
ﻩ}
ﻩ ga、edges[m][n]=1000;
ﻩ ga、edges[n][m]=1000;
ﻩ ga、e-—;
ﻩﻩ return 1;
}
int enarc(graph &ga)
{
int m,n,distance;
ﻩprintf(”请输入边得起点与终点编号,权值:");
scanf("%d %d %d”,&m,&n,&distance);
while(m〈0||m〉ga、n||n<0||n>ga、n)
{
printf("输入错误,请重新输入:”);
ﻩscanf(”%d %d”,&m,&n);
}
if(locatevex(ga,m)〈0)
{
printf(”此节点%d已经删除",m);
ﻩreturn 1;
}
if(locatevex(ga,n)<0)
{
ﻩprintf("此节点%d已经删除",n);
ﻩreturn 1;
}
ga、edges[m][n]=distance;
ga、edges[n][m]=ga、edges[m][n];
return 1;
}
4.调试分析
内容包括:
a。调试过程中遇到得问题就是如何解决得以及对设计与实现得回顾讨论与分析;
b.算法得时空分析(包括基本操作与其她算法得时间复杂度与空间复杂度得分析)与
改进设想;
c.经验与体会等。
5. 用户使用说明
通过主菜单提示,选择出您所想要知道得信息,然后通过输入节点来代替景点,从而得到景点间得所有路径,最短路径等其她信息。
6. 测试结果
(1)操作得主界面
(2) 学校景点得介绍
(3) 学校景点从西门得禾堂餐厅得所有路径所有路径
(4)学校景点从西门得禾堂餐厅得所有路径最短路径
(5) 图得更改得界面
(6)边得删除界面展示
7. 附录
#define MAX 100 //数据类型得定义
#include〈string〉
#include<iostream〉
using namespace std;
int visited[35];
int d[35];
struct views{
int num;
char name[10];
ﻩ char introduce[100];
};
typedef views datatype;
typedef struct {
datatype vexs[MAX];
int edges[MAX][MAX];
int n,e;
}graph;
void initgraph(graph *ga)//主要得操作界面得显示以及无向网操作
{
int i,j;
ﻩga->n=9;
ga->e=11;
for( i=0;i<ga—>n;i++)
{
ga—〉vexs[i]、num=i;
}
strcpy(ga-〉vexs[0]、name,"西门");
ﻩstrcpy(ga->vexs[0]、introduce,"学校得正大门,设有公交站");
ﻩstrcpy(ga—〉vexs[1]、name,"风雨篮球场”);
ﻩﻩstrcpy(ga->vexs[1]、introduce,"”);
strcpy(ga->vexs[2]、name,"田径场”);
strcpy(ga—>vexs[2]、introduce,"举办运动会,平时体育跑步锻炼等");
ﻩstrcpy(ga-〉vexs[3]、name,"京元食堂”);
ﻩ strcpy(ga—〉vexs[3]、introduce,"新食堂”);
ﻩ strcpy(ga—〉vexs[4]、name,"苍霞湖畔”);
ﻩstrcpy(ga—〉vexs[4]、introduce,”戏称“分手湖",景色宜人”);
strcpy(ga-〉vexs[5]、name,"思源楼");
ﻩ strcpy(ga-〉vexs[5]、introduce,”学校王牌土木得教学区”);
ﻩﻩstrcpy(ga—>vexs[6]、name,"图书馆");
ﻩﻩstrcpy(ga->vexs[6]、introduce,"就是大学城最高得标志性建筑”);
ﻩstrcpy(ga—〉vexs[7]、name,”北教区”);
ﻩ strcpy(ga—>vexs[7]、introduce,"北校区集中得教学楼”);
strcpy(ga-〉vexs[8]、name,”禾堂餐厅”);
strcpy(ga->vexs[8]、introduce,"旧食堂");
for(i=0;i〈ga->n;i++)
ﻩfor(j=0;j〈ga—〉n;j++)
ﻩﻩﻩﻩga->edges[i][j]=1000;
ga—〉edges[0][1]=1;
ﻩﻩga->edges[1][2]=2;
ﻩga-〉edges[1][3]=5;
ﻩﻩga-〉edges[2][4]=4;
ﻩga—〉edges[3][4]=9;
ga-〉edges[4][5]=1;
ga->edges[4][8]=1;
ﻩﻩga-〉edges[5][6]=5;
ﻩﻩga—〉edges[5][7]=7;
ﻩga-〉edges[7][8]=1;
ﻩ ga—>edges[6][7]=9;
for(i=0;i<ga-〉n;i++)
ﻩ for(j=0;j<ga—〉n;j++)
ﻩ ﻩﻩga->edges[j][i]=ga—〉edges[i][j];
}
int locatevex(graph ga,int v) / /查找景点在图中得序号
{
int i;
for(i=0;i<ga、n;i++)
ﻩ if(v==ga、vexs[i]、num)return i;
ﻩ return —1;
}
void Create_graph(graph *ga)
{
ﻩint i,j,k,w;
printf("请输入顶点数与边数:\n”);
scanf(”%d %d”,&(ga-〉n),&(ga-〉e));
ﻩprintf(”请输入景点编号,景点名字,景点介绍,建立信息表:\n”);
ﻩfor(i=0;i<ga->n;i++)
ﻩ{
ﻩﻩscanf("%d",&(ga—>vexs[i]、num));
gets(ga—>vexs[i]、name);
gets(ga->vexs[i]、introduce);
}
ﻩﻩfor(i=0;i<ga->n;i++)
for(j=0;j<=ga-〉n;j++)
ﻩ ﻩga->edges[i][j]=1000;
ﻩfor(k=0;k〈ga—>e;k++)
ﻩ{
ﻩprintf(”请输入%d条边得景点序号i,j与长度:”,k+1);
ﻩscanf(”%d %d %d",&i,&j,&w);
ga->edges[i][j]=w;
ﻩ ga->edges[j][i]=w;
ﻩ}
}
void print(graph ga)
{
int i,j;
for(i=0;i<ga、n;i++)
ﻩ for(j=0;j<ga、n;j++)
ﻩ {
printf("%d",ga、edges[i][j]);
if(j+1==ga、n)
ﻩﻩﻩ printf("\n");
ﻩ }
}
void visit(graph ga)
{
ﻩint a;
ﻩprintf("请输入景点编号:");
ﻩscanf("%d”,&a);
int i;
for( i=0;i<ga、n;i++)
{
if(a==ga、vexs[i]、num)
ﻩ {
printf("景点编号为%d \n”,ga、vexs[i]、num);
ﻩ printf("景点名称为");
puts(ga、vexs[i]、name);
printf(”景点介绍为”);
puts(ga、vexs[i]、introduce);
ﻩ break;
}
}
if(i==ga、n)printf("无此点\n”);
}
void shortestpath_djst(graph ga)
{
}
void shortestpath_floyd(graph ga)
{
int i,j,k,v,u,w,d[35][35],p[35][35][35];
for(v=0;v〈ga、n;v++)
ﻩ{
for(w=0;w〈ga、n;w++)
ﻩ {
d[v][w]=ga、edges[v][w];
ﻩfor(u=0;u〈ga、n;u++)
ﻩﻩ {
ﻩp[v][w][u]=0;
ﻩ}
if(d[v][w]〈1000)
ﻩﻩﻩ{
ﻩﻩﻩﻩp[v][w][v]=1;
ﻩﻩﻩ p[v][w][w]=1;
ﻩ }
ﻩ }
ﻩ}
for(u=0;u〈ga、n;u++)
ﻩ{
for(v=0;v〈ga、n;v++)
ﻩﻩﻩfor(w=0;w<ga、n;w++)
ﻩﻩ ﻩif(d[v][u]+d[u][w]〈d[v][w])
ﻩ ﻩ{
ﻩ ﻩd[v][w]=d[v][u]+d[u][w];
ﻩﻩ for(i=0;i<ga、n;i++)
ﻩﻩﻩﻩ ﻩp[v][w][i]=p[v][u][i]||p[u][w][i];
ﻩﻩ }
ﻩ}
printf("\n请输入出发点与目得地编号:");
ﻩscanf("%d %d",&k,&j);
printf(”\n\n");
ﻩwhile(k<0||k>ga、n||j<0||j〉ga、n)
ﻩ{
printf(”\n输入得编号不存在”);
ﻩ printf(”\n请重新输入编号:\n\n”);
ﻩ scanf(”%d %d",&k,&j);
printf("\n\n”);
ﻩ}
ﻩprintf("%s",ga、vexs[k]、name);
ﻩfor(u=0;u<ga、n;u++)
ﻩﻩif(p[k][j][u] && k!=u &&j!=u)
ﻩ printf("—-—〉%s",ga、vexs[u]、name);
printf(”-—-〉%s”,ga、vexs[j]、name);
printf(”\n\n\n总长度为%d千米\n\n\n”,d[k][j]);
}
void path(graph c,int m,int n,int k)
{
ﻩ int s,x=0;
int t;
ﻩ t=k+1;
ﻩ if(d[k]==n && k<8)
ﻩ {
ﻩ for(s=0;s〈k;s++)
{
ﻩ printf(”%s---〉”,c、vexs[d[s]]、name);
}
ﻩﻩ printf(”%s\n\n",c、vexs[d[s]]、name);
}
else
ﻩ {
ﻩ s=0;
ﻩ while(s<c、n)
{
ﻩ if((c、edges[d[k]][s]<1000)&&(visited[s]==0))
ﻩﻩ {
ﻩ visited[s]=1;
ﻩﻩ d[k+1]=s;
ﻩ ﻩ path(c,m,n,t);
ﻩﻩ visited[s]=0;
}
ﻩ ﻩ s++;
ﻩﻩ }
ﻩ }
}
void allpath(graph c)
{
int k,i,j,m,n;
printf("\n\n请输入您要查询得两个景点得编号:\n\n”);
scanf("%d %d”,&i,&j);
printf("\n\n”);
m=locatevex(c,i);
n=locatevex(c,j);
ﻩ d[0]=m;
for(k=0;k〈c、n;k++)
ﻩ visited[k]=0;
ﻩ visited[m]=1;
path(c,m,n,0);
}
void newgraph(graph &ga)
{
ﻩint changenum;
ﻩint i,m,n,t,distance,v0,v1;
printf("\n请输入要修改景点得个数:\n”);
scanf("%d",&changenum);
while(changenum<0||changenum〉ga、n)
ﻩ{
ﻩﻩprintf(”\n输入错误!请重新输入");
scanf("%d”,&changenum);
ﻩ}
for(i=0;i〈changenum;i++)
ﻩ{
printf("\n请输入景点得编号:");
ﻩ scanf("%d,&m”);
ﻩﻩt=locatevex(ga,m);
ﻩﻩprintf(”\n请输入景点得名称:");
ﻩ scanf("%s”,ga、vexs[t]、name);
printf(”\n请输入景点简介:”);
scanf("%s”,ga、vexs[t]、introduce);
ﻩ}
printf("\n请输入您要更新得边数");
scanf("%d",&changenum);
ﻩwhile(changenum<0||changenum>ga、n)
ﻩ{
ﻩﻩprintf("输入错误,请重新输入:”);
ﻩ scanf("%d",&changenum);
}
ﻩprintf("\n请输入更新边得信息: \n”);
for(i=1;i〈=changenum;i++)
ﻩ{
ﻩﻩprintf(”\n修改得第%d条边得起点终点长度为:",i);
scanf("%d %d %d",&v0,&v1,&distance);
ﻩ m=locatevex(ga,v0);
n=locatevex(ga,v1);
ﻩﻩif(m>=0&&n>=0)
ﻩﻩ{
ﻩﻩ ga、edges[m][n]=distance;
ﻩga、edges[n][m]=ga、edges[m][n];
ﻩ}
ﻩ}
}
int delvex(graph &ga) //删除顶点
{
int i=0,j;
int m,v;
ﻩif(ga、n<=0)
{
printf(”图中已经无顶点");
ﻩreturn 1;
}
ﻩprintf("\n请输入要删除得景点编号:");
ﻩscanf(”%d”,&v);
while(v<0||v〉ga、n)
ﻩ{
printf("\n输入错误,请重新输入");
scanf("%d”,&v);
}
ﻩm=locatevex(ga,v);
if(m<0)
ﻩ{
ﻩprintf("此顶点%d已删除",v);
ﻩreturn 1;
ﻩ}
ﻩfor(i=m;i〈ga、n-1;i++)
{
ﻩstrcpy(ga、vexs[i]、name,ga、vexs[i+1]、name);
ﻩﻩstrcpy(ga、vexs[i]、introduce,ga、vexs[i+1]、introduce);
}
ﻩfor(i=m;i〈ga、n-1;i++)
ﻩfor(j=0;j<ga、n;j++)
ﻩ ﻩga、edges[i][j]=ga、edges[i+1][j];
for(i=m;i<ga、n-1;i++)
for(j=0;j<ga、n;j++)
ﻩﻩﻩga、edges[j][i]=ga、edges[j][i+1];
ga、n--;
ﻩ return 1;
}
int delarc(graph &ga) //删除边
{
int m,n,v0,v1;
ﻩif(ga、e<=0)
ﻩ{
ﻩ printf("图中已经无顶边,无法删除");
ﻩ return 1;
ﻩ}
printf("\n请输入要删除得边得起点与终点得编号:");
scanf(”%d %d",&v0,&v1);
m=locatevex(ga,v0);
if(m〈0)
ﻩ{
printf("此顶点%d已删除",v0);
ﻩﻩreturn 1;
}
n=locatevex(ga,v1);
ﻩ if(n<0)
{
ﻩprintf("此顶点%d已删除",v1);
return 1;
ﻩ}
ga、edges[m][n]=1000;
ga、edges[n][m]=1000;
ﻩﻩ ga、e--;
ﻩﻩ return 1;
}
int enarc(graph &ga)
{
int m,n,distance;
printf("请输入边得起点与终点编号,权值:”);
scanf(”%d %d %d”,&m,&n,&distance);
while(m〈0||m>ga、n||n〈0||n>ga、n)
{
printf(”输入错误,请重新输入:");
ﻩscanf("%d %d",&m,&n);
}
if(locatevex(ga,m)<0)
{
ﻩprintf("此节点%d已经删除”,m);
return 1;
}
if(locatevex(ga,n)〈0)
{
printf("此节点%d已经删除",n);
return 1;
}
ga、edges[m][n]=distance;
ga、edges[n][m]=ga、edges[m][n];
return 1;
}
int envex(graph &ga) //增加节点
{
int i;
printf("请输入增加节点得信息:");
ﻩprintf("\n编号:");
ﻩscanf("%d",&ga、vexs[ga、n]、num);
printf("名称:");
ﻩscanf("%s",ga、vexs[ga、n]、name);
ﻩprintf(”简介:”);
scanf("%s",ga、vexs[ga、n]、introduce);
ga、n++;
for(i=0;i<ga、n;i++)
{
ﻩﻩga、edges[ga、n-1][i]=1000;
ﻩﻩga、edges[i][ga、n-1]=1000;
ﻩ}
return 1;
}
int changegraph(graph &ga)
{
int yourchoice;
printf("\n请选择\n\n (1)删除结点 (2)删除边\n");
ﻩprintf("\n (3)增加结点 (4)增加边\n");
printf("\n (5)更新信息 (6)返回\n\n” );
scanf(”%d",&yourchoice);
ﻩprintf(”\n\n");
while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6)
ﻩ printf("请重新输入:");
scanf("%d",&yourchoice);
ﻩ}
while(1)
{
switch(yourchoice)
ﻩ {
ﻩ case 1: delvex(ga); break;
case 2: delarc(ga); break;
case 3: envex(ga); break;
ﻩ case 4: enarc(ga); break;
case 5: newgraph(ga); break;
case 6: return 1;
ﻩ}
ﻩprintf("\n请选择\n\n (1)删除结点 (2)删除边\n");
ﻩprintf("\n (3)增加结点 (4)增加边\n");
printf(”\n (5)更新信息 (6)返回\n\n" );
scanf("%d”,&yourchoice);printf(”\n\n");
while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6))
ﻩ{
ﻩ printf("请重新输入:");
scanf(”%d",&yourchoice);
}
}
return 1;
}
void mainwork()
{
int yourchoice;
ﻩgraph ga;
initgraph(&ga);
printf("\n—--—----—--—-—---—-—-——欢迎使用校园导游程序-————---—----—---—-- \n");
ﻩprintf(” 欢迎来到福建工程院 \n\n”);
ﻩprintf(”\n 菜单选择 \n");
printf(" 1、学校景点介绍 2、 查询景点间所有路径 \n");
printf(” 3、改图 4、查询景点间最短路径 \n");
ﻩp
展开阅读全文