當前位置:編程學習大全網 - 源碼下載 - 全景Java源代碼

全景Java源代碼

要不要校園導遊系統,類似的,自己完善?

/*校園導遊計劃*/*[問題描述]

用無向網絡表示學校的校園景點平面圖,地圖中的頂點表示主要景點。

存儲景點編號、名稱、介紹等信息。圖中的邊表示景點之間的道路,存儲路徑長度等信息。要求能夠回答關於景點介紹,遊覽路線等問題。

遊客可以通過終端詢問:

(1)從壹個景點到另壹個景點的最短路徑。

(2)遊客入園,選擇最佳路線。

(3)遊客可以不重復瀏覽景點,最後返回出口(出口在入口旁邊)。

[基本要求]

(1)導遊圖被視為壹個加權的無向圖,頂點代表公園內的景點,邊代表景點之間的道路。

邊緣的重量表示距離。為該圖選擇適當的數據結構。

(2)向遊客展示各種路徑,遊客可以自行選擇瀏覽路線。

(3)在屏幕上畫出景點分布圖。

[實施提示]

(1)構造壹個無向圖G,用鄰接矩陣存儲。

(2)利用Dijstra算法計算從起點到每個頂點的最短路徑,並用二維數組p[i][]記錄。

最短路徑長度由壹維數組d[i]存儲;I的取值範圍:0 ~ 20。

(3)壹維數組have[]用於記錄最短路徑出現的順序。

(4)根據起點和終點輸出最短路徑和路徑長度。

*/

#定義INFINITY 10000/* INFINITY */

#定義最大頂點數40

#定義最大40

# include & ltstdlib.h & gt

# include & ltstdio.h & gt

# include & ltconio.h & gt

# include & ltstring.h & gt

typedef結構ArCell

{

int adj//路徑長度

}ArCell,adj matrix[最大頂點數][最大頂點數];

圖中的Typedef struct // Vertex表示主要景點,存儲了景點的編號、名稱、介紹等信息。

{

char name[30];

int num

char簡介[100];//簡介

}信息類型;

typedef結構

{

infotype vexs[MAX _ VERTEX _ NUM];

鄰接矩陣弧;

int vexnum,arcnum

} MGraph

m圖表b;

void cmd(無效);

MGraph InitGraph(void);

void菜單(void);

void瀏覽器(m graph * G);

void shortest path _ DIJ(m graph * G);

void Floyd(m graph * G);

void搜索(m graph * G);

int LocateVex(MGraph *G,char * v);

m graph * CreatUDN(m graph * G);

void print(m graph * G);

/******************************************************/

無效總管(無效)

{

system(" color 1f ");

system(" mode con:cols = 140 lines = 130 ");

cmd();

}

/******************************************************/

無效命令

{

int I;

b = init graph();

menu();

scanf("%d ",& ampI);

而(我!=5)

{

開關(壹)

{

案例1:系統(" cls ");瀏覽器(& ampb);menu();打破;

案例二:系統(“cls”);DIJ最短路徑(& ampb);menu();打破;

案例三:系統(“cls”);弗洛伊德(& ampb);menu();打破;

案例四:系統(“cls”);搜索(ampb);menu();打破;

案例五:出口(1);打破;

默認:break

}

scanf("%d ",& ampI);

}

}

初始圖(無效)

{

m graph G;

int i,j;

g . vex num = 10;

g . arcnum = 14;

for(I = 0;我& ltg .維克斯努姆;i++)

維克斯[我]。num = I;

Strcpy(G.vexs[0])。名稱,“綜合食堂”);

Strcpy(G.vexs[0])。簡介,“新標準化食堂”);

Strcpy(G.vexs[1])。名稱,“東西辦公樓”);

Strcpy (G. VEXS [1])。介紹,“全體教師辦公用房,12層,設施齊全”);

Strcpy (g.vexs [2].姓名,“5號學生宿舍”);

Strcpy(G.vexs[2].簡介,“計算機系男生宿舍,蘇式建築”);

Strcpy(G.vexs[3])。姓名,“醫院”);

Strcpy(G.vexs[3])。介紹,“校醫院,設施不是很齊全,只能看小病,收費比較貴”);

Strcpy(G.vexs[4])。名,“庫”);

Strcpy(G.vexs[4])。介紹,“有60萬冊書,設施不錯,二樓是電子閱覽室,環境優雅”);

Strcpy(G.vexs[5])。名字,“足球場”);

Strcpy(G.vexs[5])。介紹,“現代塑膠跑道,人造草坪,適合鍛煉身體的地方”);

Strcpy(G.vexs[6])。名,“沁園”);

Strcpy(G.vexs[6])。簡介,“綠樹成蔭,適合休息閱讀”);

Strcpy(G.vexs[7])。名稱,“主教學樓”);

Strcpy(G.vexs[7])。介紹,“學院最大的教學樓,有***5層,圓形建築,適合學習”);

Strcpy(G.vexs[8])。名,“西教學樓”);

Strcpy(G.vexs[8])。簡介,“我院第二大教學樓,環境差”);

Strcpy(G.vexs[9])。名稱,“多媒體大樓”);

Strcpy(G.vexs[9])。簡介,“設施先進、環境良好的多媒體教學場所”);

for(I = 0;我& ltg .維克斯努姆;i++)

for(j = 0;j & ltg .維克斯努姆;j++)

G.arcs[i][j]。adj =無窮大;

G.arcs[0][1]。adj = 100;

G.arcs[0][2]。adj = 200

G.arcs[0][6]。adj = 400

G.arcs[1][7]。adj = 300

G.arcs[2][3]。adj = 120;

G.arcs[3][6]。adj = 220

G.arcs[3][4]。adj = 100;

G.arcs[4][5]。adj = 300

G.arcs[4][9]。adj = 250

G.arcs[5][9]。adj = 350

G.arcs[6][7]。adj = 60

G.arcs[6][9]。adj = 200

G.arcs[7][8]。adj = 50

G.arcs[8][9]。adj = 20

for(I = 0;我& ltg .維克斯努姆;i++)

for(j = 0;j & ltg .維克斯努姆;j++)

電弧[j][i]。adj=G.arcs[i][j]。adj

返回G;

}//初始化圖形結束

無效菜單()

{

Printf("\n石家莊鐵道學院導遊圖\ n ");

printf(“┏━━━━━━━━━━━━━━━━━━━━┓\n”);

Printf(" ┃ 1。瀏覽校園全景┃\n》);

printf(《┃2。查看┃\n所有旅遊線路”);

printf(《┃3。選擇起點和目的地┃\n”);

printf(“┃4。查看景區信息┃\n”);

printf(“┃5。退出系統┃\n”);

printf(“┗━━━━━━━━━━━━━━━━━━━━┛\n”);

printf(" Option-:");

}

無效瀏覽器(MGraph *G)

{

int v;

printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n”);

Printf("┃號┃景點名稱┃介紹┃\n》);

for(v = 0;v & ltg-& gt;vexnumv++)

printf("┃%-4d┃%-16s┃%-56s┃\n",g->;煩惱。num,G->煩惱。名稱,G-& gt;煩惱。簡介);

printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n”);

}

//Dijkstra算法計算起點到每個頂點的最短路徑,以v0為起點。

void最短路徑_DIJ(MGraph * G)

{

int v,w,I,min,t=0,x,flag=1,v 0;

int final[20],D[20],p[20][20];

while(標誌)

{

Printf("請輸入壹個起始景點號:");

scanf("%d ",& ampv 0);

if(v 0 & lt;0 | | v0 & gtg-& gt;vexnum)

{

Printf("景點號不存在!請重新輸入景點編號:“);

scanf("%d ",& ampv 0);

}

if(v 0 & gt;= 0 & amp& ampv0 & ltg-& gt;vexnum)

flag = 0;

}

for(v = 0;v & ltg-& gt;vexnumv++)

{

final[v]= 0;

d[v]= G-& gt;arcs[v0][v]。adj

for(w = 0;w & ltg-& gt;vexnumw++)

p[v][w]= 0;

if(D[v]& lt;無窮大)

{

p[v][v 0]= 1;p[v][v]= 1;

}

}

d[v 0]= 0;final[v 0]= 1;

for(I = 1;我& ltg-& gt;vexnumi++)

{

min =無窮大;

for(w = 0;w & ltg-& gt;vexnumw++)

如果(!最終[w])

if(D[w]& lt;min){ v = w;min = D[w];}

final[v]= 1;

for(w = 0;w & ltg-& gt;vexnumw++)

如果(!最終[w]& amp;& amp(min+G-& gt;弧線[v][w]。adj & ltD[w])

{

D[w]=min+G->弧線[v][w]。adj

for(x = 0;x & ltg-& gt;vexnumx++)

p[w][x]= p[v][x];

p[w][w]= 1;

}

}

for(v = 0;v & ltg-& gt;vexnumv++)

{

如果(v0!=v) printf("%s ",G-& gt;vexs[v0]。姓名);

for(w = 0;w & ltg-& gt;vexnumw++)

{

if(p[v][w]& amp;& ampw!= v 0)printf("-& gt;%s ",G-& gt;維克斯[w]。姓名);

t++;

}

if(t & gt;g-& gt;維克斯納姆-1 & amp;& ampv0!=v)printf("總路線長度%dm\n\n ",D[v]);

}

}//ShortestPath_DIJ結束

虛空弗洛伊德(MGraph *G)

{

int v,u,I,w,k,j,flag=1,p[10][10][10],D[10][10];

for(v = 0;v & ltg-& gt;vexnumv++)

for(w = 0;w & ltg-& gt;vexnumw++)

{

D[v][w]=G->弧線[v][w]。adj

for(u = 0;u & ltg-& gt;vexnumu++)

p[v][w][u]= 0;

if(D[v][w]& lt;無窮大)

{

p[v][w][v]= 1;p[v][w][w]= 1;

}

}

for(u = 0;u & ltg-& gt;vexnumu++)

for(v = 0;v & ltg-& gt;vexnumv++)

for(w = 0;w & ltg-& gt;vexnumw++)

if(D[v][u]+D[u][w]& lt;D[v][w])

{

D[v][w]= D[v][u]+D[u][w];

for(I = 0;我& ltg-& gt;vexnumi++)

p[v][w][I]= p[v][u][I]| | p[u][w][I];

}

while(標誌)

{

Printf("請輸入起點和終點的編號:");

scanf("%d%d ",& ampk & amp;j);

if(k & lt;0 | | k & gtg-& gt;vexnum | | j & lt0 | | j & gtg-& gt;vexnum)

{

Printf("景點號不存在!請重新輸入起點和終點號碼:“);

scanf("%d%d ",& ampk & amp;j);

}

if(k & gt;= 0 & amp& ampk & ltg-& gt;維克斯納姆公司。& ampj & gt= 0 & amp& ampj & ltg-& gt;vexnum)

flag = 0;

}

printf("%s ",G-& gt;維克斯[k]。姓名);

for(u = 0;u & ltg-& gt;vexnumu++)

if(p[k][j][u]& amp;& ampk!= u & amp& ampj!=u)

printf("-& gt;%s ",G-& gt;維克斯[u]。姓名);

printf("-& gt;%s ",G-& gt;維克斯[j]。姓名);

Printf("總路線長度%dm\n ",D[k][j]);

}//弗洛伊德結束

無效搜索(管理圖*G)

{

int k,flag = 1;

while(標誌)

{

Printf("請輸入要查詢的景點編號:");

scanf("%d ",& ampk);

if(k & lt;0 | | k & gtg-& gt;vexnum)

{

Printf("景點號不存在!請重新輸入景點編號:“);

scanf("%d ",& ampk);

}

if(k & gt;= 0 & amp& ampk & ltg-& gt;vexnum)

flag = 0;

}

printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n”);

Printf("┃號┃景點名稱┃介紹┃\n》);

printf("┃%-4d┃%-16s┃%-56s┃\n",g->;維克斯[k]。num,G->維克斯[k]。名稱,G-& gt;維克斯[k]。簡介);

printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n”);

}//搜索結束

int LocateVex(MGraph *G,char* v)

{

int c=-1,I;

for(I = 0;我& ltg-& gt;vexnumi++)

if(strcmp(v,G-& gt;維克斯[我]。name)==0)

{ c = I;打破;}

返回c;

}

MGraph * CreatUDN(MGraph *G)//初始化圖形並接受用戶輸入。

{

int i,j,k,w;

char v1[20],v2[20];

Printf("請輸入圖的頂點數和弧數:");

scanf("%d%d ",& ampg-& gt;維克斯納姆。g-& gt;arcnum);

Printf("請輸入景點編號、名稱及簡介:\ n ");

for(I = 0;我& ltg-& gt;vexnumi++)

{

Printf("景點號:");

scanf("%d ",& ampg-& gt;vexs-& gt;num);

Printf("景點名稱:");

scanf("%s ",G-& gt;維克斯[我]。姓名);

Printf("景點介紹:");

scanf("%s ",G-& gt;vexs-& gt;簡介);

}

for(I = 0;我& ltg-& gt;vexnumi++)

for(j = 0;j & ltg-& gt;vexnumj++)

g-& gt;arcs[i][j]。adj =無窮大;

Printf("請輸入路徑長度:\ n ");

for(k = 0;k & ltg-& gt;arcnumk++)

{

Printf ("side %d: \n ",k+1);

Printf("景點對(x,y):");

scanf("%s ",v 1);

scanf("%s ",v2);

Printf("路徑長度:");

scanf("%d ",& ampw);

i=LocateVex(G,v 1);

j=LocateVex(G,v2);

如果(i & gt= 0 & amp& ampj & gt=0)

{

g-& gt;arcs[i][j]。adj = w;

g-& gt;arcs[j][I]= G-& gt;arcs[I][j];

}

}

返回G;

}

無效打印(管理圖*G)

{

int v,w,t = 0;

for(v = 0;v & ltg-& gt;vexnumv++)

for(w = 0;w & ltg-& gt;vexnumw++)

{ if(G-& gt;弧線[v][w]。adj = =無窮大)

printf("∞;");

else printf("%-7d ",G-& gt;弧線[v][w]。adj);

t++;

if(t % G-& gt;vexnum==0)

printf(" \ n ");

}

}

  • 上一篇:linux下線程屬性常用操作有哪些
  • 下一篇:信用卡的現狀
  • copyright 2024編程學習大全網