You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include "type.h"
#include "menu.h"
#include "function.h"
#include "creat.h"
#include "short.h"
int CreatGrath(MatGrath &G); //创造图
int DFS(MatGrath &G,int m);
void ShortestPath(MatGrath &G,int v,int w); //Dijkstra算法求最短路径
void Ppath(MatGrath &G,int path[],int w,int v); //前向递归查找路径上的顶点
int Ppath1(MatGrath &G,int path[][MAXV],int v,int w);//前向递归查找路径上的顶点
void ShortestMoney(MatGrath &G,int v,int w); //用floyd算法求最少费用
int menu(void);
int delet(MatGrath &G,int y,int x);
int search(MatGrath &G); //查找某一个城市的信息
void addbian(MatGrath &G); //增加城市的边信息
void adddian(MatGrath &G); //增加城市的信息
void modify(MatGrath &G); //修改城市信息
int display(MatGrath &G);//输出所有城市信息
void danyuan(MatGrath &G,int d); //求两点之间的最短路径
int Ppath2(MatGrath &G,int path[],int i,int v);
int main()
{
int a; //case语句的选择
int v,w; //用于求最好费用以及最短路程
int b; //选择两种最短
int c; //选择增加点还是增加边
int d; //定义单源的源点
int m; //用于DFS算法
int x,y; //代表删除点的两边城市的编号
MatGrath G;
system("color 1A"); /*修改控制台的颜色信息,改为绿字红底的模式*/
CreatGrath(G);
printf(" ■■■■■■■■■■■■■■■■■■■■ \n");
printf(" ■ ■ \n");
printf(" ■ ■■■■■■■■■■■■■■■■ ■ \n");
printf(" ■ ■欢迎使用城市公路导航系统■ ■ \n");
printf(" ■ ■■■■■■■■■■■■■■■■ ■ \n");
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");
while(a!=9)
{
a=menu();
switch(a)
{
case 1:
printf("1-路径最短,2-费用最少,请选择");
scanf("%d",&b);
scanf("%d",&v);
scanf("%d",&w);
if(b==1)
{
ShortestPath(G,v,w);
}
if(b==2)
{
ShortestMoney(G,v,w);
}
break;
case 2:
search(G);
break;
case 3:
modify(G);
break;
case 4:
printf("1-增加边2-增加点");
scanf("%d",&c);
if(c==1)
addbian(G);
else
adddian(G);
break;
case 5:
display(G);
break;
case 6:
scanf("%d",&d);
danyuan(G,d);
break;
case 7:
scanf("%d",&m);
DFS(G,m);
break;
case 8:
scanf("%d",&y);
scanf("%d",&x);
delet(G,y,x);
break;
case 9:
printf("欢迎使用,再见!\n");
exit(0);
break;
default:
break;
}
}
return 0;
}