資源簡介
用數據結構方法完成校園導航,適合數據結構課程設計

代碼片段和文件信息
#include?“string.h“?
#include?“stdio.h“?
#include?“malloc.h“
#include?“stdlib.h“
#define?Max?20000
#define?NUM?10
typedef?struct?ArcCell{
?int?adj;??/*?相鄰接的景點之間的路程?*/
}ArcCell;???/*?定義邊的類型?*/
typedef?struct?VertexType{
?int?number;??/*?景點編號?*/
?char?*sight;??/*?景點名稱?*/
}VertexType;???/*?定義頂點的類型?*/
typedef?struct{
?VertexType?vex[NUM];?/*?圖中的頂點,即為景點?*/
?ArcCell?arcs[NUM][NUM];?/*?圖中的邊,即為景點間的距離?*/
?int?vexnumarcnum;?/*?頂點數,邊數?*/
}MGraph;???/*?定義圖的類型?*/
MGraph?G;???/*?把圖定義為全局變量?*/
int?P[NUM][NUM];??/*??*/
long?int?D[NUM];??/*?輔助變量存儲最短路徑長度?*/
int???x[9]={0};?
void?CreateUDN(int?vint?a);?/*?造圖函數?*/
void?narrate();???/*說明函數*/
void?ShortestPath(int?num);?/*最短路徑函數*/
void?output(int?sight1int?sight2);?/*輸出函數*/
char?Menu();???/*?主菜單?*/
char?SearchMenu();??/*?查詢子菜單?*/
void?main()?/*?主函數?*/
{
?
?int?v0v1;
?char?ck;
?CreateUDN(NUM21);
?do
?{??
??ck=Menu();
??switch(ck)
??{
??case?‘a‘:
???system(“cls“);
???narrate();
???printf(“\n\n\t請選擇起點景點(0~9):“);
???scanf(“%d“&v0);
???printf(“\t請選擇終點景點(0~9):“);
???scanf(“%d“&v1);
???ShortestPath(v0);??/*?計算兩個景點之間的最短路徑?*/
???output(v0v1);?????/*?輸出結果?*/
???printf(“\n\n\t\t請按任意鍵繼續...\n“);
???getchar();
???getchar();
???break;
?
??};
?}while(ck!=‘b‘);
?
?
}
char?Menu()??/*?主菜單?*/
{
?char?c;
?int?flag;
?do{
??flag=1;
??system(“cls“);
??narrate();
??printf(“\n\t????????????????????????????????\n“);
??printf(“\t??????????????????????????????????\n“);
??printf(“\t????????a、查詢景點路徑???????????\n“);
??printf(“\t????????b、退出???????????????????\n“);
??printf(“\t??????????????????????????????????\n“);
??printf(“\t??????????????????????????????????\n“);
??printf(“\t\t請輸入您的選擇:“);
??scanf(“%c“&c);
??if(c==‘a‘||c==‘b‘)
???flag=0;
?}while(flag);
?return?c;
}
void?CreateUDN(int?vint?a)?/*?造圖函數?*/
{?
?int?ij;
?G.vexnum=v;??/*?初始化結構中的景點數和邊數?*/
?G.arcnum=a;
?for(i=0;i ?
?/*?初始化沒一個景點名及其景點描述?*/
?
?G.vex[0].sight=“宿舍區“;
?G.vex[1].sight=“科學樓“;
?G.vex[2].sight=“信息樓“;
?
?G.vex[3].sight=“逸夫樓“;
?G.vex[4].sight=“映雪湖“;
?
?G.vex[5].sight=“體育館“;
?G.vex[6].sight=“博文樓“;
?G.vex[7].sight=“圖書館“;
?G.vex[8].sight=“外文樓“;
?
?G.vex[9].sight=“建藝館“;
?
?/*?這里把所有的邊假定為20000,含義是這兩個景點之間是不可到達?*/
?for(i=0;i ??for(j=0;j ???G.arcs[i][j].adj=Max;
??
???/*
???
?????下邊是可直接到達的景點間的距離,由于兩個景點間距離是互相的,
?????所以要對圖中對稱的邊同時賦值。
?????
??*/
??G.arcs[0][1].adj=G.arcs[1][0].adj=100;
??G.arcs[1][3].adj=G.arcs[3][1].adj=150;
??G.arcs[0][4].adj=G.arcs[4][0].adj=100;
??G.arcs[0][5].adj=G.arcs[5][0].adj=200;
??G.arcs[4][1].adj=G.arcs[1][4].adj=10;
??G.arcs[6][3].adj=G.arcs[3][6].adj=50;
??G.arcs[8][6].adj=G.arcs[6][8].adj=50;
??G.arcs[8][9].adj=G.arcs[9][8].adj=100;
??G.arcs[4][7].adj=G.arcs[7][4].adj=400;
??G.arcs[2][7].adj=G.arcs[7][2].adj=100;
??G.arcs[7][9].adj=G.arcs[9][7].adj=110;
??G.arcs[2][9].adj=G.arcs[9][2].adj=30;
}
void?narrate()?/*?說明函數?*/
{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5998??2009-06-30?23:54??校園導航.cpp
-----------?---------??----------?-----??----
?????????????????5998????????????????????1
- 上一篇:c++ 編寫的 有理數類
- 下一篇:c語言寫的圖像插值算法
評論
共有 條評論