當前位置:股票大全官網 - 資訊咨詢 - 最短路徑算法導航學校中的所有建築和道路,並具有道路是否可通行的標誌。

最短路徑算法導航學校中的所有建築和道路,並具有道路是否可通行的標誌。

/*

校園導遊咨詢

[問題描述]

設計校園導遊方案,為來訪客人提供各種信息查詢服務。

[基本要求]

(1)設計妳學校的校園規劃,包括不少於10的景點。圖中的頂點表示學校內的景點,存儲景點的名稱、代碼、剖面圖等信息;路徑由邊表示,路徑長度和其他相關信息被存儲。

(2)為遊客提供圖片中任意景點的信息。

(3)為遊客提供圖中任意景點的方向指引,即查詢任意兩個景點之間的最短簡單路徑。

[實施提示]

壹般情況下,校園內的道路都是雙向的,可以假設校園規劃是壹個無向網絡。頂點和邊都包含相關信息。

需求分析

1從中北大學平面圖中選取10個大家熟悉的景點,抽象成壹張無向加權圖(如圖)。圖中頂點代表景點,邊上的權重代表兩地的距離。

這個程序的目的是為用戶提供路徑咨詢和景點查詢。根據用戶指定的起點和終點輸出相應的路徑或根據用戶指定的景點輸出景點信息。

南方

北方

二、輪廓設計

本文采用1數據結構

*/

/*包含頭文件*/

# include & ltstdio.h & gt

# include & ltprocess.h & gt

/*定義符號常量*/

#define INT_MAX 10000

#定義編號10

/*定義全局變量*/

int cost[n][n];/*邊的值*/

int shortest[n][n];/*兩點之間的最短距離*/

int path[n][n];/*路過的景點*/

/*自定義函數原型的描述*/

void introduce();

int shortest distance();

void floy ed();

void顯示(int i,int j);

兩個人的分工

(1)景點信息查詢

(2)兩個景點之間的最短距離

(3)兩個景點之間的小路

第三,詳細設計

void main()

{/*主函數*/

int i,j;

char k;

for(I = 0;我& lt= n;i++)

for(j = 0;j & lt= n;j++)

cost[I][j]= INT _ MAX;

cost[1][3]= cost[3][1]= 2;

成本[2][3]=成本[3][2]= 1;

成本[2][4]=成本[4][2]= 2;

cost[3][10]= cost[10][3]= 4;

cost[1][10]= cost[10][1]= 4;

cost[2][10]= cost[10][2]= 4;

cost[4][10]= cost[10][4]= 4;

cost[1][4]= cost[4][1]= 5;

成本[4][5]=成本[5][4]= 3;

成本[4][9]=成本[9][4]= 4;

成本[5][9]=成本[9][5]= 8;

成本[5][7]=成本[7][5]= 4;

成本[5][6]=成本[6][5]= 2;

成本[6][7]=成本[7][6]= 1;

成本[7][8]=成本[8][7]= 3;

成本[8][6]=成本[6][8]= 4;

cost[1][1]= cost[2][2]= cost[3][3]= cost[4][4]= cost[5][5]= 0;

成本[6][6]=成本[7][7]=成本[8][8]=成本[9][9]=成本[10][10]= 0;

while(1)

{

Printf (" -歡迎來到中北大學導遊系統!-\ n ");

Printf("1。關於景點的信息...請按I(介紹)\ n ");

Printf("2。景點最短路徑查詢...請按鍵s(shortest distance \ n ");

Printf("3。退出系統.................................................................................................................................................................

Printf("學校景點列表:\ n ");

Printf("1:學校南門");

Printf("2:學生公寓");

printf(《3:柏林花園》);

Printf("4:餐廳");

Printf("5:體育館\ n ");

Printf("6:庫");

Printf("7:重點實驗室");

Printf("8:主樓");

Printf("9:柯壹元");

Printf("10:國防生公寓\ n ");

Printf("請選擇壹項服務:");

scanf("\n%c ",k);

開關(k)

{

案例“I”:

Printf("進入景區信息查詢:");

介紹();

打破;

案例:

Printf("輸入最短路徑查詢:");

shortest distance();

打破;

案例“e”:

退出(0);

默認值:

Printf("輸入信息不正確!\n請輸入字母I或S或e,\ n ");

打破;

}

}

}/*main*/

void引入()

{/*景點介紹*/

int a;

Printf("具體要查哪個景點?請輸入景點號:“);

scanf("%d ",a);

getchar();

printf(" \ n ");

開關(a)

{

案例1:

Printf("1:學校南門\n\n學校正門矗立著壹座彭德華的石像,雄偉壯觀。\ n \ n ");打破;

案例二:

Printf("2:學生公寓集中的地方。\ n \ n ");打破;

案例三:

Printf("3:柏林花園\ n \ n \ nA晨讀和鍛煉的地方。\ n \ n ");打破;

案例4:

Printf("4:餐廳\ n \ n學生和老師吃飯的地方\ n \ n ");打破;

案例5:

Printf("5:體育館\ n \ nGymnasium \ n \ nA學生上體育課和鍛煉身體的場地,包括田徑場、足球場和籃球場。\ n \ n ");打破;

案例6:

printf(" 6:Library \ n \ n \ n學校信息資源中心有大量自習室。\ n \ n ");打破;

案例7:

Printf("7:我校重點實驗室\ n \ n研究與研究中心\ n \ n ");打破;

案例8:

Printf("8:主樓\ n \ n \學校行政辦公室的主樓。\ n \ n ");打破;

案例9:

Printf("9:易科花園\ n \ n \這裏有壹個咖啡廳和壹個放映室。\ n \ n \ n ");打破;

案例10:

Printf("10:國防生公寓\n\n國防生居住地。\ n \ n ");打破;

默認值:

Printf("景點編號輸入錯誤!請輸入1-& gt;數量10!\ n \ n ");打破;

}

}/*介紹*/

int shortestdistance()

{/*尋找兩個景點之間的最短距離*/

int i,j;

Printf("請輸入要查詢的兩個景點的編號(1-& gt;數字10的數字用','間隔):";

scanf("%d,%d ",I,j);

如果(i & gtn | | i & lt= 0 | | j & gtn | | j & lt0)

{

Printf("輸入信息不正確!\ n \ n ");

Printf("請輸入要查詢的兩個景點的編號(1-& gt;用','間隔對10的數字進行編號):\ n ");

scanf("%d,%d ",I,j);

}

其他

{

floy ed();

顯示(I,j);

}

返回1;

}/*最短距離*/

空心floyed()

{/*用floyed算法求兩個景點之間的最短路徑*/

int i,j,k;

for(I = 1;我& lt= n;i++)

for(j = 1;j & lt= n;j++)

{

最短[I][j]=成本[I][j];

path[I][j]= 0;

}

for(k = 1;k & lt= n;k++)

for(I = 1;我& lt= n;i++)

for(j = 1;j & lt= n;j++)

if(shortest[I][j]& gt;(shortest[i][k]+shortest[k][j])

{/*使用path[][]記錄I到J最短路徑上J點的前兆景點序號*/

最短[I][j]=最短[I][k]+最短[k][j];

路徑[I][j]= k;

path[j][I]= k;

}

}/*floyed*/

空顯示(int i,int j)

{/*打印兩個景點的路徑和最短距離*/

int a,b;

a = I;

b = j;

Printf("妳要查詢的兩個景點之間的最短路徑是:\ n \ n ");

if(最短[i][j]!=INT_MAX)

{

如果(我& ltj)

{

printf("%d ",b);

while(path[i][j]!=0)

{/*倒序打印出I到J路線上的所有景點*/

printf(" & lt;-%d”,路徑[I][j]);

如果(我& ltj)

j = path[I][j];

其他

I = path[j][I];

}

printf(" & lt;-%d”,a);

printf(" \ n \ n ");

printf("(% d-& gt;%d)最短距離是:%d米\n\n ",a,b,最短[a][b]);

}

其他

{

printf("%d ",a);

while(path[i][j]!=0)

{/*按順序打印出I到J路線上的所有景點*/

printf("-& gt;%d”,路徑[I][j]);

如果(我& ltj)

j = path[I][j];

其他

I = path[j][I];

}

printf("-& gt;%d”,b);

printf(" \ n \ n ");

printf("(% d-& gt;%d)最短距離是:%5d m \n\n ",a,b,最短[a][b]);

}

}

其他

Printf("輸入錯誤!這條路不存在!\ n \ n ");

printf(" \ n ");

}/*顯示*/