#include "pro3shortest_road.h"
#include "MyDijkstra.h"
#include "MyFloyd.h"
Pro3Shortest_Road::Pro3Shortest_Road(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags),i_add(0),cityRoad(100)
{
ui.setupUi(this);
for(int i=0;i<N;i++)//初始化road为-1
for(int j=0;j<N;j++)
road[i][j]=-1;
connect(ui.addCityButton,SIGNAL(clicked()),
this,SLOT(addCityTriggered()));
connect(ui.addWeightButton,SIGNAL(clicked()),
this,SLOT(addWeightTriggered()));
connect(ui.oneCityButton,SIGNAL(clicked()),
this,SLOT(singleSourceTriggered()));
connect(ui.allCityButton,SIGNAL(clicked()),
this,SLOT(allPathsTriggered()));
}
Pro3Shortest_Road::~Pro3Shortest_Road()
{
}
//增加新城市
void Pro3Shortest_Road::addCityTriggered()
{ addCity=ui.addCityLineEdit->text();
addCityStr=addCity.toStdString();
//要不要认证措施?
cityName.push_back(addCityStr);
numberQ.setNum(i_add++);
ui.addCityTextEdit->append(numberQ+"\t"+addCity);
ui.addCityLineEdit->clear();
}
//增加路径长度
void Pro3Shortest_Road::addWeightTriggered()
{ addWeightCityA=ui.cityALineEdit->text();
addWeightCityB=ui.cityBLineEdit->text();
weight=ui.weightLineEdit->text();
addWeightCityA_Str=addWeightCityA.toStdString();
addWeightCityB_Str=addWeightCityB.toStdString();
weightNum=weight.toInt();
ui.cityALineEdit->clear();
ui.cityBLineEdit->clear();
ui.weightLineEdit->clear();
if(checkAddWeight()==false)
{ QMessageBox::information(this,tr("error"),
tr("error input"));
return;
}
cityRoad.setEdge(i_weight,j_weight,weightNum);
ui.addWeightTextEdit->append(addWeightCityA+" "
+addWeightCityB+" "+weight);
}
//
bool Pro3Shortest_Road::checkAddWeight()
{ bool cityA=false,cityB=false;
int len;
len=cityName.size();//获得字符串数组的长度
for(i_weight=0;i_weight<len;i_weight++)
{ if(cityName[i_weight]==addWeightCityA_Str)
{ cityA=true;
break;
}
}
for(j_weight=0;j_weight<len;j_weight++)
{ if(cityName[j_weight]==addWeightCityB_Str)
{ cityB=true;
break;
}
}
return (cityA&&cityB);
}
//显示单源路径
void Pro3Shortest_Road::singleSourceTriggered()
{ ui.oneCityTextEdit->clear();
oneCity=ui.oneCityLineEdit->text();
oneCityStr=oneCity.toStdString();
if(checkSingleSource()==false)
{ QMessageBox::information(this,tr("error"),
tr("error input"));
return;
}
Dijkstra(&cityRoad,D,prev,i_oneCity);//有问题!!!!!!!!!!!
int len;
len=cityName.size();
for(int i_one=0;i_one<len;i_one++)
printRoad(prev,road,i_one);
ui.oneCityTextEdit->append(oneCity+"\n");
for(int i_one=0;i_one<len;i_one++)
{ numberQ.setNum(i_one);
endCity=QString::fromStdString(cityName[i_one]);
roadLen.setNum(D[i_one]);
int j_one=0;
passRoad.setNum(road[i_one][j_one++]);
while(road[i_one][j_one]!=-1)
{ passVertex.setNum(road[i_one][j_one++]);
passRoad=passRoad+" <- "+passVertex;
}
ui.oneCityTextEdit->append(numberQ+" "+endCity+" "+roadLen
+" "+passRoad+"\n");
}
ui.oneCityLineEdit->clear();
for(int i=0;i<N;i++)//初始化road为-1
for(int j=0;j<N;j++)
road[i][j]=-1;
}
bool Pro3Shortest_Road::checkSingleSource()
{ bool isCity=false;
int len;
len=cityName.size();//获得字符串数组的长度
for(i_oneCity=0;i_oneCity<len;i_oneCity++)
{ if(cityName[i_oneCity]==oneCityStr)
{ isCity=true;
break;
}
}
return isCity;
}
//显示所有路径
void Pro3Shortest_Road::allPathsTriggered()
{ ui.allCityTextEdit->clear();
Floyd(&cityRoad,DAll);
int i_all,j_all,len;
QString shortestLen,allCityA,allCityB;
len=cityName.size();
for(i_all=0;i_all<len;i_all++)
for(j_all=0;j_all<len;j_all++)
{ shortestLen.setNum(DAll[i_all][j_all]);
allCityA=QString::fromStdString(cityName[i_all]);
allCityB=QString::fromStdString(cityName[j_all]);
ui.allCityTextEdit->append(allCityA+"--->"+allCityB+" "+shortestLen);
}
}
城市之间最短路径管理软件
需积分: 9 77 浏览量
2015-06-20
15:57:19
上传
评论 1
收藏 20KB ZIP 举报
ImiracleLee
- 粉丝: 0
- 资源: 6
最新资源
- cesh代码使用,加入新方案
- 小程序包解密,解密.wxapkg
- 数据排行榜列表展示,用于排行页面展示
- ME2313-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 基于时空图卷积ST-GCN的骨骼动作识别python源码+项目说明.zip
- ME2313A-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 利用Microsoft.Office.Interop.Excel处理含有引用的excel表
- ME2312-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 最详细的S7协议解析文档
- 手把手教你搭建RT-Thread环境
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈