我們不造輪子,我們只是輪子的搬運(yùn)工。
站在用戶的角度思考問題,與客戶深入溝通,找到米脂網(wǎng)站設(shè)計與米脂網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋米脂地區(qū)。校園導(dǎo)航系統(tǒng)不是很難,因為最短路徑已經(jīng)有了Dijkstra算法,這就是一個輪子,可以直接用。
我們需要的只是往這個算法里面加參數(shù)還有對界面的創(chuàng)作,這些都很簡單。不過用輪子還得需要了解輪子,所以建議大家還是去理解一下這個算法的內(nèi)涵。實際運(yùn)行可能和我的運(yùn)行結(jié)果有出入,應(yīng)該只是顯示的問題。
前期準(zhǔn)備:
呈現(xiàn)結(jié)果:
代碼如下:
#include#include#include#include//導(dǎo)入頭文件
#define MaxLen 1000//define可以定義一個標(biāo)識符為一個常量,此處將MaxLen定義為無窮大方便后續(xù)算法之中使用
#define Max 100//定義大容量為100
void InitDis();//初始化map數(shù)組里面的各種距離信息
void Dijkstra(int v0,int s);//Dijkstra最短路徑算法
void MapList();//地圖界面
void Welcome();//歡迎界面
void Menu();//菜單界面
void BuildList();//景點(diǎn)信息界面
void Quit();//退出界面
void MenuSystem();//菜單邏輯
int map[Max][Max],Flag[Max],Dis[Max];
char name[37][50]={"","西門","西二門","孝武綜合樓","天工/天成樓","湛林體育館","南三門","湖西路","平橋","校醫(yī)院","拱橋","西區(qū)宿舍","孔子廣場","南二門","經(jīng)法/外語樓",
"櫻花林","體育樓","格物樓","西苑/西霞餐廳","校史館","教六","北門","圖書館","教一","明德樓","噴泉廣場","計科樓","南大門","音樂/美術(shù)樓","三里餐廳",
"三里宿舍","湖東路","東苑餐廳","東區(qū)宿舍","廣播臺","人文廣場","東門"};
//此處可以使用結(jié)構(gòu)體也可以使用像我一樣的二維數(shù)組,但是注意我的二維數(shù)組的第一個是空的,以便后續(xù)輸出的時候序號和建筑物一對一。
void InitDis()//初始化距離信息
{
int i,j;
for(i=1;i<=36;i++)//初始化map,使得景點(diǎn)自己和自己的距離為0,剩下的距離為無窮大。
for(j=1;j<=36;j++)
{
if(i==j)
map[i][j]=0;
else
map[i][j]=MaxLen;
}
//此處存儲各個景點(diǎn)之間的距離。注意一定要按順序來,例如不可以先map[2][5]再[2][3],因為后面的for循環(huán)會覆蓋掉
map[1][5]=100;
map[2][3]=105;map[2][5]=128;map[2][7]=150;map[2][8]=200;
map[3][6]=50;
map[4][5]=40;map[4][7]=70;
map[5][7]=50;
map[6][9]=30;
map[7][10]=120;map[7][14]=450;map[7][15]=400;
map[8][11]=47;
map[9][12]=120;
map[10][17]=60;
map[11][12]=50;map[11][18]=50;
map[12][13]=50;map[12][20]=50;
map[14][15]=120;map[14][22]=158;
map[15][22]=40;
map[16][17]=30;map[16][18]=120;map[16][23]=150;map[16][31]=300;
map[17][18]=100;
map[18][19]=57;
map[19][20]=200;map[19][23]=40;map[19][24]=34;
map[20][24]=212;
map[21][35]=50;
map[22][35]=50;map[22][28]=106;
map[23][24]=73;map[23][31]=200;map[23][32]=150;map[23][33]=120;
map[24][25]=80;map[24][33]=100;
map[25][26]=30;map[25][27]=100;map[25][34]=40;
map[28][29]=100;map[28][35]=70;map[28][31]=230;
map[29][30]=50;map[29][31]=200;
map[30][31]=200;
map[31][32]=200;
map[32][33]=100;map[32][36]=250;
map[33][34]=170;
for(i=1;i<=36;i++)
{
for(j=1;j<=36;j++)
{
map[j][i]=map[i][j];
}
}
}
void Dijkstra(int v0,int s) //v0是起點(diǎn),s是終點(diǎn)。迪杰斯特拉求最短路徑,并輸出路線
{
int min,i,j,u,v;
//初始化各個數(shù)據(jù)
int p[Max],l[Max];//這里盡可能的定義把數(shù)組定義大為了防止出現(xiàn)不夠存的現(xiàn)象,壞處就是占用內(nèi)存。
memset(p,-1,sizeof(p));//將p的前sizeof(p)個長度的數(shù)值都改成unsigned(-1)。unsigned(-1)就是大數(shù),此處要溫習(xí)反碼補(bǔ)碼知識。
memset(l,0,sizeof(l));//將l的所有長度的數(shù)值都改成unsigned(0)也就是0。
memset(Flag,0,sizeof(Flag));//memset(*,0,sizeof(*))這個函數(shù)常常用來清空數(shù)組。
//以下正式開始Djikstra算法,建議先去理解算法的含義再來理解代碼。
for(i=1;i<=36;i++)
{
Dis[i]=map[v0][i];
if(Dis[i]Dis[u]+map[u][v])
{
p[v]=u;
Dis[v]=Dis[u]+map[u][v];
}
}
}
v=s;
i=1;
while(p[v]!=v0)
{
l[i++]=p[v];
v=p[v];
}
printf("\n");
u=i-1;
printf("為您規(guī)劃的最短路線為:");
printf("%s--->",name[v0]);
for(i=u;i>=1;i--)
printf("%s--->",name[l[i]]);
printf("%s\n",name[s]);
printf("全程%d米",Dis[s]);
printf(" 用時%d分鐘\n",Dis[s]/60+1);
}
void MapList() //地圖界面
{
printf(" ┏━━━━━━━━┓ ┏━━━━━━━━━━━━━━━━━━━━━━ 北門━━━━━━┓\n");
printf(" ┃ ┃ ┃ 人文廣場 ┃\n");
printf(" 【湖北工程學(xué)院】┃ ┃ ┃ o經(jīng)法/外語樓 o ┗━━┓\n");
printf(" 【本院地圖】 ┃ ┃ ┃ o ┃音樂/美術(shù)樓\n");
printf(" ┃ ┃ ┃ 櫻花林 圖書館 ┗━━━┓\n");
printf(" ┃ ┃ ┃ o o o┃三里餐廳\n");
printf(" ┏━━━━━━━━━━━━━━━┛ ┃ ┃ ┃\n");
printf(" ┃ ┃ ┃ ┗━━━━━━┓\n");
printf(" ┃ 天工/天成樓 ┗━━┛ ┃\n");
printf(" ┃ o 【春暉湖】 o ┃\n");
printf(" ┃ o湖東路 三里宿舍┃ \n");
printf(" ┃ 拱橋 ┃ \n");
printf(" 西門 湛林 湖西路 o ┃ \n");
printf(" ┃ 體育館 o o體育樓 ┗━━━━━━━┓ \n");
printf(" ┃ o o格物樓 o東苑餐廳 ┃ \n");
printf(" ┃ o教一 東門 \n");
printf(" ┃ o西苑/西霞餐廳 ┃ \n");
printf("西二門 o平橋 o o校史館 o東區(qū)宿舍 ┃ \n");
printf(" ┗┓ 西區(qū)宿舍 o明德樓 ┃ \n");
printf(" ┃o孝武綜合樓 o o教六 ┃ \n");
printf(" ┗━┓ o 孔子廣場 噴泉廣場 廣播臺 ┏━━━━━━━━━━━━┛ \n");
printf(" ┗━━ 南三門━━━━━━━━━ 南二門━━━━━━━━━━━━━━━┓ o o┏━━━━━━━┛\n");
printf(" 校醫(yī)院 ┃ ┏━━┛ \n");
printf(" ┃計科樓 ┏━━━━┛ \n");
printf(" ┃ o ┃ \n");
printf(" ┗━━ 南大門━┛ \n\n");
}
void Welcome()//歡迎界面
{
printf("——————————————————————————————————\n\n");
printf(" 【湖工校園導(dǎo)航系統(tǒng)】\n\n");
printf(" 歡迎使用湖工校園導(dǎo)航系統(tǒng)\n");
printf(" (導(dǎo)航數(shù)據(jù)僅供參考,并不代表實際)\n\n");
printf("——————————————————————————————————\n\n");
system("pause");
system("cls");
}
void BuildList()//建筑物一覽圖
{
printf("——————————————————————————————————\n\n");
printf(" 【湖工校園導(dǎo)航系統(tǒng)】\n");
printf(" 校園一覽圖\n\n");
printf("(1)西門 (2)西二門 (3)孝武綜合樓 (4)天工/天成樓 (5)湛林體育館\n\n");
printf("(6)南三門 (7)湖西路 (8)平橋 (9)校醫(yī)院 (10)拱橋\n\n");
printf("(11)西區(qū)宿舍 (12)孔子廣場 (13)南二門 (14)經(jīng)法/外語樓(15)櫻花林\n\n");
printf("(16)體育樓 (17)格物樓 (18)西苑/霞餐廳(19)校史館 (20)教六\n\n");
printf("(21)北門 (22)圖書館 (23)教一 (24)明德樓 (25)噴泉廣場\n\n");
printf("(26)計科樓 (27)南大門 (28)音樂/美術(shù)樓(29)三里餐廳 (30)三里宿舍\n\n");
printf("(31)湖東路 (32)東苑餐廳 (33)東區(qū)宿舍 (34)廣播臺 (35)人文廣場\n\n");
printf("(36)東門\n\n");
printf("——————————————————————————————————\n\n");
}
void Menu()//菜單界面
{
system("cls");
printf("——————————————————————————————————\n\n");
printf(" 【湖工校園導(dǎo)航系統(tǒng)】\n\n");
printf(" (1) 查看地圖\n\n");
printf(" (2) 查看校園一覽圖\n\n");
printf(" (3) 進(jìn)入導(dǎo)航\n\n");
printf(" (4) 退出導(dǎo)航系統(tǒng)\n\n\n");
printf("——————————————————————————————————\n\n");
}
void Quit()//退出界面
{
system("cls");
printf("——————————————————————————————————\n\n");
printf(" 【湖工校園導(dǎo)航系統(tǒng)】\n\n");
printf(" 感謝您使用湖工導(dǎo)航系統(tǒng)!\n\n");
printf(" 作者:20541班 李小澈\n\n");
printf("——————————————————————————————————\n\n");
}
void MenuSystem()//菜單邏輯
{
int n,i;
while(1)
{
int v0=0,s=0;
Menu();
printf("請輸入您要進(jìn)行的操作:");
scanf("%d",&n);
switch(n)
{
case 1:
{
system("cls");
MapList();
printf("返回主菜單");
system("pause");
}break;
case 2:
{
system("cls");
BuildList();
printf("返回主菜單");
system("pause");
}break;
case 3:
{
system("cls");
BuildList();
while(v0<1||v0>36)
{
printf("請輸入您的起始地:");
scanf("%d",&v0);
if(v0<1||v0>36)
{
printf("輸入有誤!請重新輸入。\n");
}
}
while(s<1||s>36)
{
printf("請輸入您的目的地:");
scanf("%d",&s);
if(s<1||s>36)
{
printf("輸入有誤!請重新輸入。\n");
}
}
system("cls");
MapList();
Dijkstra(v0,s);
printf("返回主菜單");
system("pause");
}break;
case 4:
{
Quit();
exit(-1);
}break;
default:
{
printf("輸入錯誤!請重新輸入。\n");
printf("返回主菜單");
system("pause");
}break;
}
}
}
int main()//主函數(shù)
{
InitDis();
Welcome();
MenuSystem();
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
本文標(biāo)題:數(shù)據(jù)結(jié)構(gòu)課設(shè)——校園導(dǎo)航系統(tǒng)-創(chuàng)新互聯(lián)
路徑分享:http://aaarwkj.com/article16/dpghgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計、品牌網(wǎng)站設(shè)計、手機(jī)網(wǎng)站建設(shè)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容