数据结构作业.docx
《数据结构作业.docx》由会员分享,可在线阅读,更多相关《数据结构作业.docx(30页珍藏版)》请在冰豆网上搜索。
数据结构作业
数
据
结
构
班级:
计算机科学与技术02班
组长:
宋志浩41009010212
小组成员:
康维虎41009010211
赵兵41009010216
许晓飞41009010213
刘望41009010215
朱元410090102126
#include
#defineP30/*除数余留法中的除数*/
#defineNULLKEY0
#defineMAX30/*人名个数*/
#definehashlen30/*哈希表长度*/
#defineMax20000//最大值为20000
#defineNUM10//顶点最大数为10
intsum=0,k=0;
MGraphG;
intP[NUM][NUM];//定义景点指针
longintD[NUM];//最短距离
intx[10]={0};
voidCreateUDN(intv,inta);
voidShortestPath(intnum);
voidoutput(intsight1,intsight2);
charMenu();
voidsearch();
charSearchMenu();
voidHaMiTonian(int);
voidNextValue(int);
voiddisplay();
voidsearch()//查询景点信息
typedefstructxinxi
{
inthaoma;
intcode;
structxinxi*next;
}xinxi;
structnode
intk;
}a[30];//paixu
typedefstructNode/*哈希表结构体*/
charkey_code[10];/*哈希表地址*/
structNode*next;
}Node;
typedefstructhashtable/*创建哈希表*/
intkey;
}HashTable[MAX];
typedefstructArcCell//弧信息
intadj;//权值,顶点距离
}ArcCell;
typedefstructVertexType//顶点类型
intnumber;
char*sight;//景点名称
char*description;//景点介绍
}VertexType;
typedefstruct
VertexTypevex[NUM];//顶点向量
ArcCellarcs[NUM][NUM];//数组表示,邻接矩阵
intvexnum,arcnum;//图的当前顶点数和弧数
}MGraph;
typedefstructNode
chardata;
structNode*LChild;
structNode*RChild;
}BiTNode,*BiTree;
char*ch;
intlen;
}HString;
//@@@-----文本处理器
//------paixu
intshell(structnodea[30],intn)
inti,j,t;
for(t=n/2;t>=1;t=t/2)
for(i=t+1;i<=n;i++)
if(a[i].k{a[0].k=a[i].k;for(j=i-t;a[0].k0;j=j-t)a[j+t].k=a[j].k;a[j+t].k=a[0].k;}}return0;}//快速排序intpartition(structnodea[30],ints1,ints2){inti,j;i=s1;j=s2;a[0].k=a[s1].k;while(i{while(ij--;if(i{a[i].k=a[j].k;i++;}while(ii++;if(i{a[j].k=a[i].k;j--;}}a[i].k=a[0].k;returni;}voidquick(structnodea[30],ints1,ints2){intm,i,j;if(s1{m=partition(a,s1,s2);quick(a,s1,m-1);quick(a,m+1,s2);}//for(i=1;i<=n;i++)}//堆排序voidsift(structnodea[30],intp,intm){inti,j,flag,t;flag=a[p].k;i=p;j=2*i;t=0;while(j<=m&&!t){if(jif(flag>=a[j].k)t=1;else{a[i].k=a[j].k;i=j;j=2*i;}}a[i].k=flag;}voidheap(structnodea[30],intn){inti,flag;for(i=n/2;i>=1;--i)sift(a,i,n);for(i=n;i>=2;--i){flag=a[1].k;a[1].k=a[i].k;a[i].k=flag;sift(a,1,i-1);}} //菜单voidMune(){printf("\n");printf("请输入你的选择!\n");printf("1:希尔排序!\n");printf("2:快速排序!\n");printf("3:堆排序!\n");printf("4:退出?\n");printf("\n");} intHash(intkey){intmode=key%P;/*除留余数法得到的余数*/returnmode;}voidHash_Init(HashTableht)/*哈希表初始化*/{inti;for(i=0;i{ht[i].key=NULLKEY;ht[i].next=NULL;}}intCharToInt(charstr[]){returnstr[0]+str[1]+str[2];}intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/{intkey=Hash(CharToInt(node->key_code));Node*p;p=(Node*)malloc(sizeof(Node));if(ht[key].key==NULLKEY){ht[key].key=key;ht[key].next=node;k++;}elseif(ht[key].key==key){p=ht[key].next;k++;while(p->next!=NULL){p=p->next;k++;}p->next=node;k++;}return1;} Node*Hash_Search(HashTableht,intkey)/*查找函数*/{intp0=Hash(key);if(ht[p0].key==NULLKEY){sum++;returnNULL;}elseif(ht[p0].key==p0){Node*p=ht[p0].next;while(p!=NULL){if(CharToInt(p->key_code)==key){sum++;returnp;}p=p->next;sum++;}}returnNULL;}intHash_Create(HashTableht)/*哈希表长度*/{inti;Node*node;Hash_Init(ht);printf("请输入姓名:");/*输入30个姓名*/for(i=0;i<30;i++){node=(Node*)malloc(sizeof(Node));scanf("%s",node->key_code);node->next=NULL;Hash_Insert(ht,node);}printf("\nCreateSuccessfully!\n");return1;}inthash_output(HashTableh)/*哈希表的输出部分*/{Node*a;inti,j,count2=0;a=(Node*)malloc(sizeof(Node));j=0;for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
a[0].k=a[i].k;
for(j=i-t;a[0].k0;j=j-t)
a[j+t].k=a[j].k;
a[j+t].k=a[0].k;
}
return0;
//快速排序
intpartition(structnodea[30],ints1,ints2)
inti,j;
i=s1;
j=s2;
a[0].k=a[s1].k;
while(i{while(ij--;if(i{a[i].k=a[j].k;i++;}while(ii++;if(i{a[j].k=a[i].k;j--;}}a[i].k=a[0].k;returni;}voidquick(structnodea[30],ints1,ints2){intm,i,j;if(s1{m=partition(a,s1,s2);quick(a,s1,m-1);quick(a,m+1,s2);}//for(i=1;i<=n;i++)}//堆排序voidsift(structnodea[30],intp,intm){inti,j,flag,t;flag=a[p].k;i=p;j=2*i;t=0;while(j<=m&&!t){if(jif(flag>=a[j].k)t=1;else{a[i].k=a[j].k;i=j;j=2*i;}}a[i].k=flag;}voidheap(structnodea[30],intn){inti,flag;for(i=n/2;i>=1;--i)sift(a,i,n);for(i=n;i>=2;--i){flag=a[1].k;a[1].k=a[i].k;a[i].k=flag;sift(a,1,i-1);}} //菜单voidMune(){printf("\n");printf("请输入你的选择!\n");printf("1:希尔排序!\n");printf("2:快速排序!\n");printf("3:堆排序!\n");printf("4:退出?\n");printf("\n");} intHash(intkey){intmode=key%P;/*除留余数法得到的余数*/returnmode;}voidHash_Init(HashTableht)/*哈希表初始化*/{inti;for(i=0;i{ht[i].key=NULLKEY;ht[i].next=NULL;}}intCharToInt(charstr[]){returnstr[0]+str[1]+str[2];}intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/{intkey=Hash(CharToInt(node->key_code));Node*p;p=(Node*)malloc(sizeof(Node));if(ht[key].key==NULLKEY){ht[key].key=key;ht[key].next=node;k++;}elseif(ht[key].key==key){p=ht[key].next;k++;while(p->next!=NULL){p=p->next;k++;}p->next=node;k++;}return1;} Node*Hash_Search(HashTableht,intkey)/*查找函数*/{intp0=Hash(key);if(ht[p0].key==NULLKEY){sum++;returnNULL;}elseif(ht[p0].key==p0){Node*p=ht[p0].next;while(p!=NULL){if(CharToInt(p->key_code)==key){sum++;returnp;}p=p->next;sum++;}}returnNULL;}intHash_Create(HashTableht)/*哈希表长度*/{inti;Node*node;Hash_Init(ht);printf("请输入姓名:");/*输入30个姓名*/for(i=0;i<30;i++){node=(Node*)malloc(sizeof(Node));scanf("%s",node->key_code);node->next=NULL;Hash_Insert(ht,node);}printf("\nCreateSuccessfully!\n");return1;}inthash_output(HashTableh)/*哈希表的输出部分*/{Node*a;inti,j,count2=0;a=(Node*)malloc(sizeof(Node));j=0;for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
while(ij--;if(i{a[i].k=a[j].k;i++;}while(ii++;if(i{a[j].k=a[i].k;j--;}}a[i].k=a[0].k;returni;}voidquick(structnodea[30],ints1,ints2){intm,i,j;if(s1{m=partition(a,s1,s2);quick(a,s1,m-1);quick(a,m+1,s2);}//for(i=1;i<=n;i++)}//堆排序voidsift(structnodea[30],intp,intm){inti,j,flag,t;flag=a[p].k;i=p;j=2*i;t=0;while(j<=m&&!t){if(jif(flag>=a[j].k)t=1;else{a[i].k=a[j].k;i=j;j=2*i;}}a[i].k=flag;}voidheap(structnodea[30],intn){inti,flag;for(i=n/2;i>=1;--i)sift(a,i,n);for(i=n;i>=2;--i){flag=a[1].k;a[1].k=a[i].k;a[i].k=flag;sift(a,1,i-1);}} //菜单voidMune(){printf("\n");printf("请输入你的选择!\n");printf("1:希尔排序!\n");printf("2:快速排序!\n");printf("3:堆排序!\n");printf("4:退出?\n");printf("\n");} intHash(intkey){intmode=key%P;/*除留余数法得到的余数*/returnmode;}voidHash_Init(HashTableht)/*哈希表初始化*/{inti;for(i=0;i{ht[i].key=NULLKEY;ht[i].next=NULL;}}intCharToInt(charstr[]){returnstr[0]+str[1]+str[2];}intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/{intkey=Hash(CharToInt(node->key_code));Node*p;p=(Node*)malloc(sizeof(Node));if(ht[key].key==NULLKEY){ht[key].key=key;ht[key].next=node;k++;}elseif(ht[key].key==key){p=ht[key].next;k++;while(p->next!=NULL){p=p->next;k++;}p->next=node;k++;}return1;} Node*Hash_Search(HashTableht,intkey)/*查找函数*/{intp0=Hash(key);if(ht[p0].key==NULLKEY){sum++;returnNULL;}elseif(ht[p0].key==p0){Node*p=ht[p0].next;while(p!=NULL){if(CharToInt(p->key_code)==key){sum++;returnp;}p=p->next;sum++;}}returnNULL;}intHash_Create(HashTableht)/*哈希表长度*/{inti;Node*node;Hash_Init(ht);printf("请输入姓名:");/*输入30个姓名*/for(i=0;i<30;i++){node=(Node*)malloc(sizeof(Node));scanf("%s",node->key_code);node->next=NULL;Hash_Insert(ht,node);}printf("\nCreateSuccessfully!\n");return1;}inthash_output(HashTableh)/*哈希表的输出部分*/{Node*a;inti,j,count2=0;a=(Node*)malloc(sizeof(Node));j=0;for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
j--;
if(i{a[i].k=a[j].k;i++;}while(ii++;if(i{a[j].k=a[i].k;j--;}}a[i].k=a[0].k;returni;}voidquick(structnodea[30],ints1,ints2){intm,i,j;if(s1{m=partition(a,s1,s2);quick(a,s1,m-1);quick(a,m+1,s2);}//for(i=1;i<=n;i++)}//堆排序voidsift(structnodea[30],intp,intm){inti,j,flag,t;flag=a[p].k;i=p;j=2*i;t=0;while(j<=m&&!t){if(jif(flag>=a[j].k)t=1;else{a[i].k=a[j].k;i=j;j=2*i;}}a[i].k=flag;}voidheap(structnodea[30],intn){inti,flag;for(i=n/2;i>=1;--i)sift(a,i,n);for(i=n;i>=2;--i){flag=a[1].k;a[1].k=a[i].k;a[i].k=flag;sift(a,1,i-1);}} //菜单voidMune(){printf("\n");printf("请输入你的选择!\n");printf("1:希尔排序!\n");printf("2:快速排序!\n");printf("3:堆排序!\n");printf("4:退出?\n");printf("\n");} intHash(intkey){intmode=key%P;/*除留余数法得到的余数*/returnmode;}voidHash_Init(HashTableht)/*哈希表初始化*/{inti;for(i=0;i{ht[i].key=NULLKEY;ht[i].next=NULL;}}intCharToInt(charstr[]){returnstr[0]+str[1]+str[2];}intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/{intkey=Hash(CharToInt(node->key_code));Node*p;p=(Node*)malloc(sizeof(Node));if(ht[key].key==NULLKEY){ht[key].key=key;ht[key].next=node;k++;}elseif(ht[key].key==key){p=ht[key].next;k++;while(p->next!=NULL){p=p->next;k++;}p->next=node;k++;}return1;} Node*Hash_Search(HashTableht,intkey)/*查找函数*/{intp0=Hash(key);if(ht[p0].key==NULLKEY){sum++;returnNULL;}elseif(ht[p0].key==p0){Node*p=ht[p0].next;while(p!=NULL){if(CharToInt(p->key_code)==key){sum++;returnp;}p=p->next;sum++;}}returnNULL;}intHash_Create(HashTableht)/*哈希表长度*/{inti;Node*node;Hash_Init(ht);printf("请输入姓名:");/*输入30个姓名*/for(i=0;i<30;i++){node=(Node*)malloc(sizeof(Node));scanf("%s",node->key_code);node->next=NULL;Hash_Insert(ht,node);}printf("\nCreateSuccessfully!\n");return1;}inthash_output(HashTableh)/*哈希表的输出部分*/{Node*a;inti,j,count2=0;a=(Node*)malloc(sizeof(Node));j=0;for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
a[i].k=a[j].k;
i++;
while(ii++;if(i{a[j].k=a[i].k;j--;}}a[i].k=a[0].k;returni;}voidquick(structnodea[30],ints1,ints2){intm,i,j;if(s1{m=partition(a,s1,s2);quick(a,s1,m-1);quick(a,m+1,s2);}//for(i=1;i<=n;i++)}//堆排序voidsift(structnodea[30],intp,intm){inti,j,flag,t;flag=a[p].k;i=p;j=2*i;t=0;while(j<=m&&!t){if(jif(flag>=a[j].k)t=1;else{a[i].k=a[j].k;i=j;j=2*i;}}a[i].k=flag;}voidheap(structnodea[30],intn){inti,flag;for(i=n/2;i>=1;--i)sift(a,i,n);for(i=n;i>=2;--i){flag=a[1].k;a[1].k=a[i].k;a[i].k=flag;sift(a,1,i-1);}} //菜单voidMune(){printf("\n");printf("请输入你的选择!\n");printf("1:希尔排序!\n");printf("2:快速排序!\n");printf("3:堆排序!\n");printf("4:退出?\n");printf("\n");} intHash(intkey){intmode=key%P;/*除留余数法得到的余数*/returnmode;}voidHash_Init(HashTableht)/*哈希表初始化*/{inti;for(i=0;i{ht[i].key=NULLKEY;ht[i].next=NULL;}}intCharToInt(charstr[]){returnstr[0]+str[1]+str[2];}intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/{intkey=Hash(CharToInt(node->key_code));Node*p;p=(Node*)malloc(sizeof(Node));if(ht[key].key==NULLKEY){ht[key].key=key;ht[key].next=node;k++;}elseif(ht[key].key==key){p=ht[key].next;k++;while(p->next!=NULL){p=p->next;k++;}p->next=node;k++;}return1;} Node*Hash_Search(HashTableht,intkey)/*查找函数*/{intp0=Hash(key);if(ht[p0].key==NULLKEY){sum++;returnNULL;}elseif(ht[p0].key==p0){Node*p=ht[p0].next;while(p!=NULL){if(CharToInt(p->key_code)==key){sum++;returnp;}p=p->next;sum++;}}returnNULL;}intHash_Create(HashTableht)/*哈希表长度*/{inti;Node*node;Hash_Init(ht);printf("请输入姓名:");/*输入30个姓名*/for(i=0;i<30;i++){node=(Node*)malloc(sizeof(Node));scanf("%s",node->key_code);node->next=NULL;Hash_Insert(ht,node);}printf("\nCreateSuccessfully!\n");return1;}inthash_output(HashTableh)/*哈希表的输出部分*/{Node*a;inti,j,count2=0;a=(Node*)malloc(sizeof(Node));j=0;for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
if(i{a[j].k=a[i].k;j--;}}a[i].k=a[0].k;returni;}voidquick(structnodea[30],ints1,ints2){intm,i,j;if(s1{m=partition(a,s1,s2);quick(a,s1,m-1);quick(a,m+1,s2);}//for(i=1;i<=n;i++)}//堆排序voidsift(structnodea[30],intp,intm){inti,j,flag,t;flag=a[p].k;i=p;j=2*i;t=0;while(j<=m&&!t){if(jif(flag>=a[j].k)t=1;else{a[i].k=a[j].k;i=j;j=2*i;}}a[i].k=flag;}voidheap(structnodea[30],intn){inti,flag;for(i=n/2;i>=1;--i)sift(a,i,n);for(i=n;i>=2;--i){flag=a[1].k;a[1].k=a[i].k;a[i].k=flag;sift(a,1,i-1);}} //菜单voidMune(){printf("\n");printf("请输入你的选择!\n");printf("1:希尔排序!\n");printf("2:快速排序!\n");printf("3:堆排序!\n");printf("4:退出?\n");printf("\n");} intHash(intkey){intmode=key%P;/*除留余数法得到的余数*/returnmode;}voidHash_Init(HashTableht)/*哈希表初始化*/{inti;for(i=0;i{ht[i].key=NULLKEY;ht[i].next=NULL;}}intCharToInt(charstr[]){returnstr[0]+str[1]+str[2];}intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/{intkey=Hash(CharToInt(node->key_code));Node*p;p=(Node*)malloc(sizeof(Node));if(ht[key].key==NULLKEY){ht[key].key=key;ht[key].next=node;k++;}elseif(ht[key].key==key){p=ht[key].next;k++;while(p->next!=NULL){p=p->next;k++;}p->next=node;k++;}return1;} Node*Hash_Search(HashTableht,intkey)/*查找函数*/{intp0=Hash(key);if(ht[p0].key==NULLKEY){sum++;returnNULL;}elseif(ht[p0].key==p0){Node*p=ht[p0].next;while(p!=NULL){if(CharToInt(p->key_code)==key){sum++;returnp;}p=p->next;sum++;}}returnNULL;}intHash_Create(HashTableht)/*哈希表长度*/{inti;Node*node;Hash_Init(ht);printf("请输入姓名:");/*输入30个姓名*/for(i=0;i<30;i++){node=(Node*)malloc(sizeof(Node));scanf("%s",node->key_code);node->next=NULL;Hash_Insert(ht,node);}printf("\nCreateSuccessfully!\n");return1;}inthash_output(HashTableh)/*哈希表的输出部分*/{Node*a;inti,j,count2=0;a=(Node*)malloc(sizeof(Node));j=0;for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
a[j].k=a[i].k;
a[i].k=a[0].k;
returni;
voidquick(structnodea[30],ints1,ints2)
intm,i,j;
if(s1{m=partition(a,s1,s2);quick(a,s1,m-1);quick(a,m+1,s2);}//for(i=1;i<=n;i++)}//堆排序voidsift(structnodea[30],intp,intm){inti,j,flag,t;flag=a[p].k;i=p;j=2*i;t=0;while(j<=m&&!t){if(jif(flag>=a[j].k)t=1;else{a[i].k=a[j].k;i=j;j=2*i;}}a[i].k=flag;}voidheap(structnodea[30],intn){inti,flag;for(i=n/2;i>=1;--i)sift(a,i,n);for(i=n;i>=2;--i){flag=a[1].k;a[1].k=a[i].k;a[i].k=flag;sift(a,1,i-1);}} //菜单voidMune(){printf("\n");printf("请输入你的选择!\n");printf("1:希尔排序!\n");printf("2:快速排序!\n");printf("3:堆排序!\n");printf("4:退出?\n");printf("\n");} intHash(intkey){intmode=key%P;/*除留余数法得到的余数*/returnmode;}voidHash_Init(HashTableht)/*哈希表初始化*/{inti;for(i=0;i{ht[i].key=NULLKEY;ht[i].next=NULL;}}intCharToInt(charstr[]){returnstr[0]+str[1]+str[2];}intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/{intkey=Hash(CharToInt(node->key_code));Node*p;p=(Node*)malloc(sizeof(Node));if(ht[key].key==NULLKEY){ht[key].key=key;ht[key].next=node;k++;}elseif(ht[key].key==key){p=ht[key].next;k++;while(p->next!=NULL){p=p->next;k++;}p->next=node;k++;}return1;} Node*Hash_Search(HashTableht,intkey)/*查找函数*/{intp0=Hash(key);if(ht[p0].key==NULLKEY){sum++;returnNULL;}elseif(ht[p0].key==p0){Node*p=ht[p0].next;while(p!=NULL){if(CharToInt(p->key_code)==key){sum++;returnp;}p=p->next;sum++;}}returnNULL;}intHash_Create(HashTableht)/*哈希表长度*/{inti;Node*node;Hash_Init(ht);printf("请输入姓名:");/*输入30个姓名*/for(i=0;i<30;i++){node=(Node*)malloc(sizeof(Node));scanf("%s",node->key_code);node->next=NULL;Hash_Insert(ht,node);}printf("\nCreateSuccessfully!\n");return1;}inthash_output(HashTableh)/*哈希表的输出部分*/{Node*a;inti,j,count2=0;a=(Node*)malloc(sizeof(Node));j=0;for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
m=partition(a,s1,s2);
quick(a,s1,m-1);
quick(a,m+1,s2);
//for(i=1;i<=n;i++)
//堆排序
voidsift(structnodea[30],intp,intm)
inti,j,flag,t;
flag=a[p].k;
i=p;
j=2*i;
t=0;
while(j<=m&&!
t)
if(jif(flag>=a[j].k)t=1;else{a[i].k=a[j].k;i=j;j=2*i;}}a[i].k=flag;}voidheap(structnodea[30],intn){inti,flag;for(i=n/2;i>=1;--i)sift(a,i,n);for(i=n;i>=2;--i){flag=a[1].k;a[1].k=a[i].k;a[i].k=flag;sift(a,1,i-1);}} //菜单voidMune(){printf("\n");printf("请输入你的选择!\n");printf("1:希尔排序!\n");printf("2:快速排序!\n");printf("3:堆排序!\n");printf("4:退出?\n");printf("\n");} intHash(intkey){intmode=key%P;/*除留余数法得到的余数*/returnmode;}voidHash_Init(HashTableht)/*哈希表初始化*/{inti;for(i=0;i{ht[i].key=NULLKEY;ht[i].next=NULL;}}intCharToInt(charstr[]){returnstr[0]+str[1]+str[2];}intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/{intkey=Hash(CharToInt(node->key_code));Node*p;p=(Node*)malloc(sizeof(Node));if(ht[key].key==NULLKEY){ht[key].key=key;ht[key].next=node;k++;}elseif(ht[key].key==key){p=ht[key].next;k++;while(p->next!=NULL){p=p->next;k++;}p->next=node;k++;}return1;} Node*Hash_Search(HashTableht,intkey)/*查找函数*/{intp0=Hash(key);if(ht[p0].key==NULLKEY){sum++;returnNULL;}elseif(ht[p0].key==p0){Node*p=ht[p0].next;while(p!=NULL){if(CharToInt(p->key_code)==key){sum++;returnp;}p=p->next;sum++;}}returnNULL;}intHash_Create(HashTableht)/*哈希表长度*/{inti;Node*node;Hash_Init(ht);printf("请输入姓名:");/*输入30个姓名*/for(i=0;i<30;i++){node=(Node*)malloc(sizeof(Node));scanf("%s",node->key_code);node->next=NULL;Hash_Insert(ht,node);}printf("\nCreateSuccessfully!\n");return1;}inthash_output(HashTableh)/*哈希表的输出部分*/{Node*a;inti,j,count2=0;a=(Node*)malloc(sizeof(Node));j=0;for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
if(flag>=a[j].k)t=1;
else{
i=j;
a[i].k=flag;
voidheap(structnodea[30],intn)
inti,flag;
for(i=n/2;i>=1;--i)
sift(a,i,n);
for(i=n;i>=2;--i)
flag=a[1].k;
a[1].k=a[i].k;
sift(a,1,i-1);
//菜单
voidMune()
printf("\n");
printf("请输入你的选择!
\n");
printf("1:
希尔排序!
printf("2:
快速排序!
printf("3:
堆排序!
printf("4:
退出?
intHash(intkey)
intmode=key%P;/*除留余数法得到的余数*/
returnmode;
voidHash_Init(HashTableht)/*哈希表初始化*/
inti;
for(i=0;i{ht[i].key=NULLKEY;ht[i].next=NULL;}}intCharToInt(charstr[]){returnstr[0]+str[1]+str[2];}intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/{intkey=Hash(CharToInt(node->key_code));Node*p;p=(Node*)malloc(sizeof(Node));if(ht[key].key==NULLKEY){ht[key].key=key;ht[key].next=node;k++;}elseif(ht[key].key==key){p=ht[key].next;k++;while(p->next!=NULL){p=p->next;k++;}p->next=node;k++;}return1;} Node*Hash_Search(HashTableht,intkey)/*查找函数*/{intp0=Hash(key);if(ht[p0].key==NULLKEY){sum++;returnNULL;}elseif(ht[p0].key==p0){Node*p=ht[p0].next;while(p!=NULL){if(CharToInt(p->key_code)==key){sum++;returnp;}p=p->next;sum++;}}returnNULL;}intHash_Create(HashTableht)/*哈希表长度*/{inti;Node*node;Hash_Init(ht);printf("请输入姓名:");/*输入30个姓名*/for(i=0;i<30;i++){node=(Node*)malloc(sizeof(Node));scanf("%s",node->key_code);node->next=NULL;Hash_Insert(ht,node);}printf("\nCreateSuccessfully!\n");return1;}inthash_output(HashTableh)/*哈希表的输出部分*/{Node*a;inti,j,count2=0;a=(Node*)malloc(sizeof(Node));j=0;for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
ht[i].key=NULLKEY;
ht[i].next=NULL;
intCharToInt(charstr[]){
returnstr[0]+str[1]+str[2];
intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/
intkey=Hash(CharToInt(node->key_code));
Node*p;
p=(Node*)malloc(sizeof(Node));
if(ht[key].key==NULLKEY)
ht[key].key=key;
ht[key].next=node;
k++;
elseif(ht[key].key==key)
p=ht[key].next;
while(p->next!
=NULL)
p=p->next;
p->next=node;
return1;
Node*Hash_Search(HashTableht,intkey)/*查找函数*/
intp0=Hash(key);
if(ht[p0].key==NULLKEY)
{sum++;returnNULL;}
elseif(ht[p0].key==p0)
Node*p=ht[p0].next;
while(p!
if(CharToInt(p->key_code)==key)
{sum++;
returnp;
sum++;
returnNULL;
intHash_Create(HashTableht)/*哈希表长度*/
Node*node;
Hash_Init(ht);
printf("请输入姓名:
");/*输入30个姓名*/
for(i=0;i<30;i++)
node=(Node*)malloc(sizeof(Node));
scanf("%s",node->key_code);
node->next=NULL;
Hash_Insert(ht,node);
printf("\nCreateSuccessfully!
inthash_output(HashTableh)/*哈希表的输出部分*/
Node*a;
inti,j,count2=0;
a=(Node*)malloc(sizeof(Node));
j=0;
for(i=0;i{printf("%4d",i);printf("%4d",h[i].key);if(h[i].next!=0)count2++;j=1;a=h[i].next;while(a){printf("->%s",(*a).key_code);a=(*a).next;j++;count2+=j;}printf("\n");}returncount2;} voidHash_Link()/*链表法构造函数*/ {intkey;inti;Node*node;HashTableht;Hash_Create(ht);hash_output(ht);printf("count=%d\n",k);/*查找总长度*/printf("ASL=%d/30\n",k);/*平均查找长度*/printf("请输入要查找的数据:");/*输入查找的姓名*/scanf("%s",&key);node=Hash_Search(ht,key);printf("查找次数:%d\n",sum);if(node!=NULL)printf("查找成功!");elseprintf("查找不成功!");}voidhash_create(inth[],intstatus[],intdata){intaddress;intdi;address=data%P;if(status[address]==0){h[address]=data;status[address]=1;}else{for(di=1;di<=hashlen-1;di++){address=((data%P)+di)%hashlen;if(status[address]==0){h[address]=data;status[address]=1;break;}}}return;}inthash_search(inth[],intkey){intaddress,di;address=key%P;if(h[address]==key)/*哈希表中元素与查找元素是否相等*/return1;else{for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/{address=((key%P)+di)%hashlen;if(h[address]==key){returndi+1;break;}}}if(di>=hashlen)return0;} charMenu(){charc;intflag;do{flag=1;system("cls");printf("**************************************************\n");printf("^^^^^^^1、查询景点路径^^^^^^^^\n");printf("^^^^^^^2、查询景点信息^^^^^^^^\n");printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");printf("**************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='4')flag=0;}while(flag);returnc;}charSearchMenu()//查询景点路径{charc;intflag;do{flag=1;system("cls");printf("************************************************\n");printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");printf("************************************************\n");printf("请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3')flag=0;}while(flag);returnc;} voidsearch()//查询景点信息{intnum;inti;charc;charname[20];do{system("cls");c=SearchMenu();switch(c){case'1':system("cls");printf("请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
printf("%4d",i);
printf("%4d",h[i].key);
if(h[i].next!
=0)
count2++;
j=1;
a=h[i].next;
while(a)
printf("->%s",(*a).key_code);
a=(*a).next;
j++;
count2+=j;
returncount2;
voidHash_Link()/*链表法构造函数*/
HashTableht;
Hash_Create(ht);
hash_output(ht);
printf("count=%d\n",k);/*查找总长度*/
printf("ASL=%d/30\n",k);/*平均查找长度*/
printf("请输入要查找的数据:
");/*输入查找的姓名*/
scanf("%s",&key);
node=Hash_Search(ht,key);
printf("查找次数:
%d\n",sum);
if(node!
printf("查找成功!
");
else
printf("查找不成功!
voidhash_create(inth[],intstatus[],intdata)
intaddress;
intdi;
address=data%P;
if(status[address]==0)
h[address]=data;
status[address]=1;
for(di=1;di<=hashlen-1;di++)
address=((data%P)+di)%hashlen;
break;
return;
inthash_search(inth[],intkey)
{intaddress,di;
address=key%P;
if(h[address]==key)/*哈希表中元素与查找元素是否相等*/
for(di=1;di<=hashlen-1;di++)/*哈希表中元素与查找元素不相等,查找下一元素*/
address=((key%P)+di)%hashlen;
if(h[address]==key)
returndi+1;
if(di>=hashlen)
charMenu()
charc;
intflag;
do
flag=1;
system("cls");
printf("**************************************************\n");
printf("^^^^^^^1、查询景点路径^^^^^^^^\n");
printf("^^^^^^^2、查询景点信息^^^^^^^^\n");
printf("^^^^^^^3、推荐参观路线^^^^^^^^\n");
printf("^^^^^^^4、退出^^^^^^^^^^^^^^^^\n");
printf("请输入您的选择:
scanf("%c",&c);
if(c=='1'||c=='2'||c=='3'||c=='4')
flag=0;
}while(flag);
returnc;
charSearchMenu()//查询景点路径
printf("************************************************\n");
printf("^^^^^^^1、按照景点编号查询^^^^^^^\n");
printf("^^^^^^^2、按照景点名称查询^^^^^^^\n");
printf("^^^^^^^3、返回^^^^^^^^^^^^^^^^^^^\n");
if(c=='1'||c=='2'||c=='3')
intnum;
charname[20];
c=SearchMenu();
switch(c)
case'1':
printf("请输入您要查找的景点编号:
scanf("%d",&num);
for(i=0;i{if(num==G.vex[i].number){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;case'2':system("cls");printf("请输入您要查找的景点名称:");scanf("%s",name);for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
if(num==G.vex[i].number)
printf("您要查找景点信息如下:
printf("%-25s\n",G.vex[i].description);
printf("按ENTER返回");
getchar();
if(i==NUM)
printf("没有找到!
case'2':
printf("请输入您要查找的景点名称:
scanf("%s",name);
for(i=0;i{if(!strcmp(name,G.vex[i].sight)){printf("您要查找景点信息如下:");printf("%-25s\n",G.vex[i].description);printf("按ENTER返回");getchar();getchar();break;}}if(i==NUM){printf("没有找到!");printf("按ENTER返回");getchar();getchar();}break;}}while(c!='3');} voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G{inti,j;G.vexnum=v;//初始化图的顶点数和边数G.arcnum=a;for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
if(!
strcmp(name,G.vex[i].sight))
}while(c!
='3');
voidCreateUDN(intv,inta)//采用数组表示法,构造无向图G
G.vexnum=v;//初始化图的顶点数和边数
G.arcnum=a;
for(i=0;iG.vex[0].sight="大门";G.vex[0].description="校园出入的正门。";G.vex[1].sight="图书馆";G.vex[1].description="阅览,借阅图书。";G.vex[2].sight="教学楼";G.vex[2].description="学生上课的地方";G.vex[3].sight="食堂一";G.vex[3].description="吃饭的地方";G.vex[4].sight="大学生活动中心";G.vex[4].description="日常庆典活动,社团演出";G.vex[5].sight="游泳馆";G.vex[5].description="游泳";G.vex[6].sight="体育场";G.vex[6].description="土操场";G.vex[7].sight="2宿舍";G.vex[7].description="学生日常生活起居地";G.vex[8].sight="食堂三";G.vex[8].description="民族餐厅";G.vex[9].sight="运动场地";G.vex[9].description="篮球、排球、足球场地";for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
G.vex[0].sight="大门";
G.vex[0].description="校园出入的正门。
";
G.vex[1].sight="图书馆";
G.vex[1].description="阅览,借阅图书。
G.vex[2].sight="教学楼";
G.vex[2].description="学生上课的地方";
G.vex[3].sight="食堂一";
G.vex[3].description="吃饭的地方";
G.vex[4].sight="大学生活动中心";
G.vex[4].description="日常庆典活动,社团演出";
G.vex[5].sight="游泳馆";
G.vex[5].description="游泳";
G.vex[6].sight="体育场";
G.vex[6].description="土操场";
G.vex[7].sight="2宿舍";
G.vex[7].description="学生日常生活起居地";
G.vex[8].sight="食堂三";
G.vex[8].description="民族餐厅";
G.vex[9].sight="运动场地";
G.vex[9].description="篮球、排球、足球场地";
for(i=0;ifor(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
for(j=0;jG.arcs[i][j].adj=Max;G.arcs[0][1].adj=G.arcs[1][0].adj=20;G.arcs[1][2].adj=G.arcs[2][1].adj=24;G.arcs[1][3].adj=G.arcs[3][1].adj=26;G.arcs[1][4].adj=G.arcs[4][1].adj=16;G.arcs[1][5].adj=G.arcs[5][1].adj=50;G.arcs[2][7].adj=G.arcs[7][2].adj=1000;G.arcs[3][4].adj=G.arcs[4][3].adj=34;G.arcs[3][6].adj=G.arcs[6][3].adj=10;G.arcs[4][6].adj=G.arcs[6][4].adj=19;G.arcs[5][6].adj=G.arcs[6][5].adj=25;G.arcs[5][7].adj=G.arcs[7][5].adj=500;G.arcs[7][8].adj=G.arcs[8][7].adj=51;G.arcs[7][9].adj=G.arcs[9][7].adj=200;G.arcs[8][9].adj=G.arcs[9][8].adj=100;}voidShortestPath(intnum)//最短路径{intv,w,i,t;intfinal[NUM];//辅助数组intmin;for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
G.arcs[i][j].adj=Max;
G.arcs[0][1].adj=G.arcs[1][0].adj=20;
G.arcs[1][2].adj=G.arcs[2][1].adj=24;
G.arcs[1][3].adj=G.arcs[3][1].adj=26;
G.arcs[1][4].adj=G.arcs[4][1].adj=16;
G.arcs[1][5].adj=G.arcs[5][1].adj=50;
G.arcs[2][7].adj=G.arcs[7][2].adj=1000;
G.arcs[3][4].adj=G.arcs[4][3].adj=34;
G.arcs[3][6].adj=G.arcs[6][3].adj=10;
G.arcs[4][6].adj=G.arcs[6][4].adj=19;
G.arcs[5][6].adj=G.arcs[6][5].adj=25;
G.arcs[5][7].adj=G.arcs[7][5].adj=500;
G.arcs[7][8].adj=G.arcs[8][7].adj=51;
G.arcs[7][9].adj=G.arcs[9][7].adj=200;
G.arcs[8][9].adj=G.arcs[9][8].adj=100;
voidShortestPath(intnum)//最短路径
intv,w,i,t;
intfinal[NUM];//辅助数组
intmin;
for(v=0;v{final[v]=0;D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
final[v]=0;
D[v]=G.arcs[num][v].adj;//将num到其余顶点的路径长度初始化为权值
for(w=0;wP[v][w]=0;if(D[v]<20000){P[v][num]=1;}}D[num]=0;for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
P[v][w]=0;
if(D[v]<20000)
P[v][num]=1;
D[num]=0;
for(i=0;i{min=Max;for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
min=Max;
for(w=0;wif(!final[w])//求下一条最短路径if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
final[w])//求下一条最短路径
if(D[w]{v=w;min=D[w];}for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
v=w;
min=D[w];
for(w=0;wif(!final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
final[w]&&((min+G.arcs[v][w].adj){D[w]=min+G.arcs[v][w].adj;for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
D[w]=min+G.arcs[v][w].adj;
for(t=0;tP[w][t]=P[v][t];}}} voidoutput(intsight1,intsight2)//输出界面{inta,b,c,d,q=0;a=sight2;if(a!=sight1){printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);printf("(最短距离为%dm.",D[a]);printf("%s",G.vex[sight1].sight);d=sight1;for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
P[w][t]=P[v][t];
voidoutput(intsight1,intsight2)//输出界面
inta,b,c,d,q=0;
a=sight2;
if(a!
=sight1)
printf("从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);
printf("(最短距离为%dm.",D[a]);
printf("%s",G.vex[sight1].sight);
d=sight1;
for(c=0;c{gate:;P[a][sight1]=0;for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
gate:
;
P[a][sight1]=0;
for(b=0;b{if(G.arcs[d][b].adj<20000&&P[a][b]){printf("-->%s",G.vex[b].sight);q=q+1;P[a][b]=0;d=b;if(q%8==0)printf("\n");gotogate;}}}}} voidHaMiTonian(intm)//用来求推荐路线{if(m>9)return;L:NextValue(m);if(x[m]==0)return;if(m==7&&G.arcs[0][x[9]-1].adj!=20000)
if(G.arcs[d][b].adj<20000&&P[a][b])
printf("-->%s",G.vex[b].sight);
q=q+1;
P[a][b]=0;
d=b;
if(q%8==0)printf("\n");
gotogate;
voidHaMiTonian(intm)//用来求推荐路线
if(m>9)return;
L:
NextValue(m);
if(x[m]==0)
if(m==7&&G.arcs[0][x[9]-1].adj!
=20000)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1