杨腾泽
yangtengze 2 years ago
parent 4c78e0926a
commit 31b3c58caf

@ -12,73 +12,128 @@
G.arcnum=14; //说明图的边的数目
for(i=1;i<=G.vexnum;i++)
{
G.vexs[i].no=i;
G.vexs[i].bianhao=i;
}
strcpy(G.vexs[1].sight,"烟台市");
strcpy(G.vexs[1].introduction,"山东省沿海城市,位于山东半岛中部");
strcpy(G.vexs[2].sight,"青岛市");
strcpy(G.vexs[2].introduction,"山东省沿海城市,位于山东半岛南部,有崂山风景区等众多景点");
strcpy(G.vexs[3].sight,"潍坊市");
strcpy(G.vexs[3].introduction,"景色优美,气候宜人,经济发达");
strcpy(G.vexs[4].sight,"威海市");
strcpy(G.vexs[4].introduction,"山东省辖地级市,位于山东半岛东端,北,东,南三面濒临 黄海");
strcpy(G.vexs[5].sight,"东营市");
strcpy(G.vexs[5].introduction,"山东省辖地级市,位于山东省东北部,黄河入海口的三角洲地带");
strcpy(G.vexs[6].sight,"滨州市");
strcpy(G.vexs[6].introduction,"山东省辖地级市,位于山东省北部、鲁北平原、黄河三角洲腹地");
strcpy(G.vexs[7].sight,"德州市");
strcpy(G.vexs[7].introduction,"山东省辖地级市,位于山东省西北部,北以新河为界,");
strcpy(G.vexs[8].sight,"聊城市");
strcpy(G.vexs[8].introduction,"山东省辖地级市,位于山东省西部,西部靠漳卫河与河 ");
strcpy(G.vexs[9].sight,"菏泽市");
strcpy(G.vexs[9].introduction,"位于山东西南部,鲁苏豫皖交界地带,东与济宁市相邻");
strcpy(G.vexs[10].sight,"泰安市");
strcpy(G.vexs[10].introduction,"位于山东省中部,是鲁中地区中心城,国家历史文化名城");
strcpy(G.vexs[1].sight,"济南市");
strcpy(G.vexs[2].sight,"德州市");
strcpy(G.vexs[3].sight,"淄博市");
strcpy(G.vexs[4].sight,"潍坊市");
strcpy(G.vexs[5].sight,"烟台市");
strcpy(G.vexs[6].sight,"威海市");
strcpy(G.vexs[7].sight,"青岛市");
strcpy(G.vexs[8].sight,"日照市");
strcpy(G.vexs[9].sight,"临沂市");
strcpy(G.vexs[10].sight,"济宁市");
strcpy(G.vexs[11].sight,"泰安市");
strcpy(G.vexs[12].sight,"滨州市");
strcpy(G.vexs[13].sight,"菏泽市");
strcpy(G.vexs[14].sight,"即墨市");
strcpy(G.vexs[15].sight,"胶州市");
strcpy(G.vexs[16].sight,"胶南市");
strcpy(G.vexs[17].sight,"诸城市");
strcpy(G.vexs[18].sight,"高密市");
strcpy(G.vexs[19].sight,"安丘市");
strcpy(G.vexs[20].sight,"莒县");
strcpy(G.vexs[21].sight,"平度市");
strcpy(G.vexs[22].sight,"莱西市");
strcpy(G.vexs[23].sight,"莱阳市");
strcpy(G.vexs[24].sight,"海阳市");
strcpy(G.vexs[25].sight,"乳山市");
strcpy(G.vexs[26].sight,"文登市");
strcpy(G.vexs[27].sight,"荣成市");
strcpy(G.vexs[28].sight,"牟平区");
strcpy(G.vexs[29].sight,"蓬莱市");
strcpy(G.vexs[30].sight,"栖霞市");
strcpy(G.vexs[31].sight,"莱州市");
strcpy(G.vexs[32].sight,"招远市");
strcpy(G.vexs[33].sight,"龙口市");
strcpy(G.vexs[34].sight,"昌邑市");
strcpy(G.vexs[35].sight,"昌乐");
strcpy(G.vexs[36].sight,"孝光市");
strcpy(G.vexs[37].sight,"青州市");
strcpy(G.vexs[38].sight,"临朐");
strcpy(G.vexs[39].sight,"沂水");
strcpy(G.vexs[40].sight,"广饶");
strcpy(G.vexs[41].sight,"东营市");
strcpy(G.vexs[42].sight,"沂源");
strcpy(G.vexs[43].sight,"恒台");
strcpy(G.vexs[44].sight,"博兴");
strcpy(G.vexs[45].sight,"博山");
strcpy(G.vexs[46].sight,"沂南");
strcpy(G.vexs[47].sight,"蒙阴");
strcpy(G.vexs[48].sight,"莱芜市");
for(i=0;i<G.vexnum;i++)
{
for(j=0;j<G.vexnum;j++)
{
G.arc[i][j].length=INF;
G.arc[i][j].money=INF;
}
}
G.arc[1][3].length=G.arc[3][1].length=500;
G.arc[1][4].length=G.arc[4][1].length=200;
G.arc[3][5].length=G.arc[5][3].length=100;
G.arc[10][3].length=G.arc[3][10].length=800;
G.arc[6][4].length=G.arc[4][6].length=200;
G.arc[5][2].length=G.arc[2][5].length=200;
G.arc[2][4].length=G.arc[4][2].length=800;
G.arc[5][7].length=G.arc[7][5].length=500;
G.arc[2][4].length=G.arc[4][2].length=400;
G.arc[4][7].length=G.arc[7][4].length=600;
G.arc[6][8].length=G.arc[8][6].length=500;
G.arc[8][7].length=G.arc[7][8].length=300;
G.arc[6][9].length=G.arc[9][6].length=500;
G.arc[10][3].length=G.arc[3][10].length=600;
G.arc[1][3].money=G.arc[3][1].money=100;
G.arc[1][4].money=G.arc[4][1].money=250;
G.arc[3][5].money=G.arc[5][3].money=360;
G.arc[10][3].money=G.arc[3][10].money=5000;
G.arc[6][4].money=G.arc[4][6].money=200;
G.arc[5][2].money=G.arc[2][5].money=100;
G.arc[2][4].money=G.arc[4][2].money=450;
G.arc[5][7].money=G.arc[7][5].money=600;
G.arc[6][4].money=G.arc[4][6].money=120;
G.arc[4][7].money=G.arc[7][4].money=300;
G.arc[6][8].money=G.arc[8][6].money=460;
G.arc[8][7].money=G.arc[7][8].money=100;
G.arc[6][9].money=G.arc[9][6].money=640;
G.arc[10][3].money=G.arc[3][10].money=230;
G.arc[7][14].length=G.arc[14][7].length=51;
G.arc[7][15].length=G.arc[15][7].length=41;
G.arc[15][16].length=G.arc[16][15].length=47;
G.arc[15][17].length=G.arc[17][15].length=65;
G.arc[16][17].length=G.arc[17][16].length=70;
G.arc[17][18].length=G.arc[18][17].length=56;
G.arc[17][19].length=G.arc[19][17].length=139;
G.arc[17][20].length=G.arc[20][7].length=200;
G.arc[15][21].length=G.arc[21][15].length=52;
G.arc[18][21].length=G.arc[21][18].length=54;
G.arc[14][22].length=G.arc[22][14].length=83;
G.arc[21][22].length=G.arc[22][21].length=48;
G.arc[22][23].length=G.arc[23][22].length=19;
G.arc[23][25].length=G.arc[25][23].length=104;
G.arc[24][25].length=G.arc[25][24].length=39;
G.arc[14][24].length=G.arc[24][14].length=96;
G.arc[25][26].length=G.arc[26][25].length=59;
G.arc[26][27].length=G.arc[27][26].length=35;
G.arc[25][28].length=G.arc[28][25].length=71;
G.arc[6][28].length=G.arc[28][6].length=52;
G.arc[5][28].length=G.arc[28][5].length=30;
G.arc[6][26].length=G.arc[26][6].length=45;
G.arc[5][23].length=G.arc[23][5].length=115;
G.arc[23][30].length=G.arc[30][23].length=43;
G.arc[23][31].length=G.arc[31][23].length=35;
G.arc[29][30].length=G.arc[30][29].length=64;
G.arc[5][29].length=G.arc[29][5].length=78;
G.arc[29][33].length=G.arc[33][29].length=61;
G.arc[29][32].length=G.arc[32][29].length=67;
G.arc[30][32].length=G.arc[32][30].length=42;
G.arc[22][32].length=G.arc[32][22].length=41;
G.arc[31][33].length=G.arc[33][31].length=68;
G.arc[31][34].length=G.arc[34][31].length=70;
G.arc[19][34].length=G.arc[34][19].length=79;
G.arc[4][34].length=G.arc[34][4].length=33;
G.arc[4][19].length=G.arc[19][4].length=27;
G.arc[8][17].length=G.arc[17][8].length=70;
G.arc[8][16].length=G.arc[16][8].length=94;
G.arc[8][20].length=G.arc[20][8].length=50;
G.arc[4][35].length=G.arc[35][4].length=40;
G.arc[4][36].length=G.arc[36][4].length=40;
G.arc[36][37].length=G.arc[37][36].length=28;
G.arc[36][41].length=G.arc[41][36].length=47;
G.arc[36][40].length=G.arc[40][36].length=36;
G.arc[40][44].length=G.arc[44][40].length=28;
G.arc[43][44].length=G.arc[44][43].length=33;
G.arc[44][12].length=G.arc[12][44].length=34;
G.arc[3][43].length=G.arc[43][3].length=43;
G.arc[12][44].length=G.arc[44][12].length=34;
G.arc[12][41].length=G.arc[41][12].length=66;
G.arc[3][37].length=G.arc[37][3].length=50;
G.arc[35][37].length=G.arc[37][35].length=49;
G.arc[38][37].length=G.arc[37][38].length=23;
G.arc[4][39].length=G.arc[39][4].length=89;
G.arc[39][46].length=G.arc[46][39].length=25;
G.arc[39][42].length=G.arc[42][39].length=86;
G.arc[42][45].length=G.arc[45][42].length=53;
G.arc[42][48].length=G.arc[48][42].length=43;
G.arc[3][45].length=G.arc[45][3].length=84;
return 1;
}

@ -7,7 +7,7 @@
***********************/
int search(MatGrath &G)
int Search(MatGrath &G)
{ int a;
int flag=1;
printf("请输入您要查询的城市编号\n");
@ -22,8 +22,8 @@
else
{ flag=0;
printf("编号 景点名称 简介 \n");
printf(" %-4d %-16s%-58s\n",G.vexs[a].no,G.vexs[a].sight,G.vexs[a].introduction);
printf("编号 景点名称 \n");
printf(" %-4d %-16s\n",G.vexs[a].bianhao,G.vexs[a].sight);
;
}
}
@ -36,12 +36,12 @@
***********************/
void addbian(MatGrath &G)
void AddEdge(MatGrath &G)
{ int b,c,d;
int i,j;
printf("请输入你要增加的边的两个点\n");
printf("请输入你要增加的路径的两个城市\n");
scanf("%d %d",&b,&c);
printf("请输入你要增加的边的权值\n");
printf("请输入你要增加的路径的距离\n");
scanf("%d",&d);
for (i=1; i<=G.vexnum;i++)
for (j=1;j<=G.vexnum;j++)
@ -58,7 +58,7 @@
***********************/
void adddian(MatGrath &G)
void AddVertices(MatGrath &G)
{
int a;
int b;
@ -69,27 +69,23 @@
int flag;
printf("请输入该城市的编号\n");
scanf("%d",&a);
G.vexs[a].no=a;
G.vexs[a].bianhao = a;
while(flag)
{
if(a>=0&&a<=G.vexnum)
{
printf("编号已经存在,请重新输入\n");
scanf("%d",&a);
G.vexs[a].no=a;
G.vexs[a].bianhao = a;
}
else
flag=0;
}
printf("请输入你要连接的点权值和所需费用\n");
scanf("%d",&b);
scanf("%d",&c);
printf("请输入你要连接的点权值\n");
scanf("%d",&d);
G.arc[a][b].money=G.arc[a][b].money=c;
G.arc[a][b].length=G.arc[b][a].length=d;
scanf("%s",G.vexs[a].sight);
scanf("%s",G.vexs[a].introduction);
G.vexnum++;
}
@ -117,10 +113,8 @@
else
flag=0;
}
printf("请输入你要修改的信息\n");
scanf("%s",G.vexs[a].sight);
scanf("%s",G.vexs[a].introduction);
printf("请输入你要修改的信息\n");
scanf("%s",G.vexs[a].sight);
}
@ -135,7 +129,7 @@
printf("城市编号 城市名称 城市介绍\n");
for (i=1; i<=G.vexnum;i++)
{
printf("% -9d % -10s %-15s\n",G.vexs[i].no,G.vexs[i].sight,G.vexs[i].introduction);
printf("% -9d % -10s\n",G.vexs[i].bianhao,G.vexs[i].sight);
}
return 0;
}
@ -145,34 +139,30 @@
***********************/
bool visited[MAXV];
int DFS(MatGrath &G,int m)//深度优先搜索
bool visited[MAXV];
int DFS(MatGrath &G,int m)//深度优先搜索
{
int i;
printf("%d %s\n",G.vexs[m].bianhao,G.vexs[m].sight);
visited[m]=true;
for(i=1;i<=G.vexnum;i++)
{
if(G.arc[m][i].length!=INF&&visited[i]==false)
{
int i;
printf("%d %s %s\n",G.vexs[m].no,G.vexs[m].sight,G.vexs[m].introduction);
visited[m]=true;
for(i=1;i<=G.vexnum;i++)
{
if(G.arc[m][i].length!=INF&&visited[i]==false)
{
DFS(G,i);
}
}
return 0;
DFS(G,i);
}
/***********************
***********************/
int delet(MatGrath &G,int y,int x)
{
G.arc[x][y].length=G.arc[y][x].length=INF;
return 0;
}
}
return 0;
}
/***********************
***********************/
int delet(MatGrath &G,int y,int x)
{
G.arc[x][y].length=G.arc[y][x].length=INF;
return 0;
}

@ -48,17 +48,56 @@ int main()
printf(" ■ ■欢迎使用城市公路导航系统■ ■ \n");
printf(" ■ ■■■■■■■■■■■■■■■■ ■ \n");
printf("\n");
printf(" 编号 城市名称\n");
printf(" 1 烟台市\n");
printf(" 2 青岛市\n");
printf(" 3 潍坊市\n");
printf(" 4 威海市\n");
printf(" 5 东营市\n");
printf(" 6 滨州市\n");
printf(" 7 德州市\n");
printf(" 8 聊城市\n");
printf(" 9 菏泽市\n");
printf(" 10 泰安市\n");
printf(" 1 济南市\n");
printf(" 2 德州市\n");
printf(" 3 淄博市\n");
printf(" 4 潍坊市\n");
printf(" 5 烟台市\n");
printf(" 6 威海市\n");
printf(" 7 青岛市\n");
printf(" 8 日照市\n");
printf(" 9 临沂市\n");
printf(" 10 济宁市\n");
printf(" 11 泰安市\n");
printf(" 12 滨州市\n");
printf(" 13 菏泽市\n");
printf(" 14 即墨市\n");
printf(" 15 胶州市\n");
printf(" 16 胶南市\n");
printf(" 17 诸城市\n");
printf(" 18 高密市\n");
printf(" 19 安丘市\n");
printf(" 20 莒县\n");
printf(" 21 平度市\n");
printf(" 22 莱西市\n");
printf(" 23 莱阳市\n");
printf(" 24 海阳市\n");
printf(" 25 乳山市\n");
printf(" 26 文登市\n");
printf(" 27 荣成市\n");
printf(" 28 牟平市\n");
printf(" 29 蓬莱市\n");
printf(" 30 栖霞市\n");
printf(" 31 莱州市\n");
printf(" 32 招远市\n");
printf(" 33 龙口市\n");
printf(" 34 昌邑市\n");
printf(" 35 昌乐\n");
printf(" 36 孝光市\n");
printf(" 37 青州市\n");
printf(" 38 临朐\n");
printf(" 39 沂水\n");
printf(" 40 广饶\n");
printf(" 41 东营市\n");
printf(" 42 沂源\n");
printf(" 43 恒台\n");
printf(" 44 博兴\n");
printf(" 45 博山\n");
printf(" 46 沂南\n");
printf(" 47 蒙阴\n");
printf(" 48 莱芜市\n");
while(a!=9)
{
a=menu();
@ -86,7 +125,7 @@ int main()
modify(G);
break;
case 4:
printf("1-增加边2-增加点");
printf("1-增加边,2-增加点");
scanf("%d",&c);
if(c==1)

@ -15,9 +15,9 @@
printf(" ┏━━━━━━━━━━━━━━━━━━━━┓\n");
printf(" ┃ 1.选择出发点和目的地 ┃\n");
printf(" ┃ 2.查看景点信息 ┃\n");
printf(" ┃ 2.查看城市信息 ┃\n");
printf(" ┃ 3.修改城市信息 ┃\n");
printf(" ┃ 4.增加景点信息 ┃\n");
printf(" ┃ 4.增加城市信息 ┃\n");
printf(" ┃ 5.输出所有城市信息 ┃\n");
printf(" ┃ 6.输出单源路径 ┃\n");
printf(" ┃ 7.DFS遍历输出 ┃\n");

@ -66,64 +66,6 @@ void ShortestPath(MatGrath &G,int v,int w)//求两点之间的最短路径
/***********************
floyd
***********************/
//Floyd算法
int Ppath1(MatGrath &G,int path[][MAXV],int v,int w) //前向递归查找路径上的顶点
{
int k;
k=path[v][w];
if (k==-1) return 0; //找到了起点则返回
Ppath1(G,path,v,k); //找顶点i的前一个顶点k
printf("%s->",G.vexs[k].sight);
Ppath1(G,path,k,w); //找顶点k的前一个顶点j
}
void ShortestMoney(MatGrath &G,int v,int w)//求花费最少的路径
{
int A[MAXV][MAXV],path[MAXV][MAXV];
int i,j,k;
for (i=0; i<G.vexnum; i++)
for (j=0; j<G.vexnum; j++)
{
A[i][j]=G.arc[i][j].money;
path[i][j]=-1; //i到j没有边
}
for (k=0; k<G.vexnum; k++)
{
for (i=0; i<G.vexnum; i++)
for (j=0; j<G.vexnum; j++)
if (A[i][j]>A[i][k]+A[k][j])
{
A[i][j]=A[i][k]+A[k][j];
path[i][j]=k;
}
}
if (A[v][w]==INF)
{
if (v!=w)
printf("从%d到%d没有路径\n",v,w);
}
else
{
printf(" 从%s到%s路径费用:%d元人民币 路径:",G.vexs[v].sight,G.vexs[w].sight,A[v][w]);
printf("%s->",G.vexs[v].sight); //输出路径上的起点
Ppath1(G,path,v,w); //输出路径上的中间点
printf("%s\n",G.vexs[w].sight); //输出路径上的终点
}
}
/***********************
Dijkstra

@ -2,28 +2,26 @@
#ifndef _TEST_H_
#define _TEST_H_
#define NO 30
#define M 30
#define MAXV 100 //最大顶点个数
#define INF 32767 //INF表示∞
struct VertexType
{ int bianhao; //顶点的编号
char sight[10]; //地点
}; //定义顶点的类型
struct ArcCell
{
int length;//边的长度,既两个地点之的长
int money;
}; //定义边的类型
struct VertexType
{ int no; //顶点的编号
char sight[10]; //地点
char introduction[100]; //地点的介绍
}; //定义顶点的类型
struct MatGrath
{
int vexnum; //顶点数
int arcnum; //边数
VertexType vexs[NO]; //在图结构体中调用点的结构体
ArcCell arc[NO][NO]; //在图结构体中调用边的结构体
VertexType vexs[M]; //在图结构体中调用点的结构体
ArcCell arc[M][M]; //在图结构体中调用边的结构体
};
#endif
Loading…
Cancel
Save