建筑物对应的序号:
判断两点是否可达的邻接矩阵:
每个地点的坐标:
主要用了深度优先搜索(DFS)
#include<iostream>
using namespace std;
#include<fstream>
#include<string>
#include<stdio.h>
#include<math.h>
bool visit[26] = { false };
int record[26] = {0};
int minpath[26] = { 0 };
int temp = 0;
int recordmin=0;
double mindistant = 9999;
double distant=0;
void search(char c[26][26],int d[26][2], int i1, int i2)
{
record[temp++] = i1;
visit[i1 - 1] = true;
for (int j = 0;j < 26;j++)
{
if (c[i1 - 1][j] == '1')
{
if (visit[j] == false && j == i2 - 1)
{
distant += sqrt(pow((d[i1 - 1][0] - d[j][0]), 2) + pow((d[i1 - 1][1] - d[j][1]), 2));
record[temp++] = i2;
for (int i = 0;i < temp;i++)
{
cout << record[i] << "->";
}
temp--;
cout << "END"<< endl;
if (distant < mindistant)
{
mindistant = distant;
for (int r = 0;r < 26;r++)
{
minpath[r] = record[r];
}
recordmin = temp;
}
distant -= sqrt(pow((d[i1 - 1][0] - d[j][0]), 2) + pow((d[i1 - 1][1] - d[j][1]), 2));
}
else if (visit[j] == false)
{
distant += sqrt(pow((d[i1 - 1][0] - d[j][0]), 2) + pow((d[i1 - 1][1] - d[j][1]), 2));
visit[j] = true;
search(c, d,j + 1, i2);
temp--;
distant -= sqrt(pow((d[i1 - 1][0] - d[j][0]), 2) + pow((d[i1 - 1][1] - d[j][1]), 2));
visit[j] = false;
}
}
}
}
int main()
{
char a[26][26] = { 0 };
int b[26][2] = { 0 };
ifstream ifs;
ifs.open("judge.txt", ios::in);
char c;
for (int i = 0;i < 26;i++)
{
for (int j = 0;j < 26;j++)
{
c = ifs.get();
if (c == '\n') c = ifs.get();
a[i][j] = c;
}
}
ifstream ifs1;
ifs1.open("location.txt", ios::in);
char cc=' ';
for (int i = 0;i < 26;i++)
{
for (int j = 0;j < 2;j++)
{
ifs1 >> b[i][j];
}
}
ifstream ifs2;
ifs2.open("numbers.txt", ios::in);
string buf;
cout << "【地点序号大全】" << endl;
while (getline(ifs2,buf))
{
cout << buf << endl;
}
int i1, i2;
cout << "-------------------------------------" << endl;
cout << "请输入你的起始位置序号:";
cin >> i1;
if (i1 < 1 || i1>26)
{
cout << "输入有误!" << endl;return 0;
}
cout << "请输入你想去的位置序号:";
cin >> i2;
if (i2 < 1 || i2>26)
{
cout << "输入有误!" << endl;return 0;
}
else if (i1 == i2)
{
cout << "你已经到达目的地了!" << endl;return 0;
}
else
{
cout << "-------------------------------------" << endl;
cout << "所有路径如下所示:"<<endl;
search(a,b, i1, i2);
cout << "-------------------------------------" << endl;
cout << "最短路径为:" << endl;
for (int i = 0;i < recordmin+1;i++)
{
cout << minpath[i]<<"->";
}
cout << "END";
cout <<endl<<"最短路径长度为:"<< mindistant;
cout<<endl << "-------------------------------------" << endl;
}
}
调试结果:
【地点序号大全】
1 梅苑餐厅
2 兰苑餐厅
3 献血屋
4 门诊部
5 菊园餐厅
6 南区篮球场
7 演艺中心
8 文逸楼
9 文俊东楼
10 文俊西楼
11 文新楼
12 文清楼
13 行政东楼
14 行政西楼
15 竹苑饭堂
16 理学实验楼
17 图书馆
18 理科教学楼-南楼
19 理科教学楼-北楼
20 计算机实验楼
21 工程实验楼-南楼
22 工程实验楼-北楼
23 生化实验楼
24 中心运动场
25 北区篮球场
26 体育馆
-------------------------------------
请输入你的起始位置序号:9
请输入你想去的位置序号:15
-------------------------------------
所有路径如下所示:
9->3->4->5->17->12->13->14->15->END
9->3->4->5->17->13->14->15->END
9->3->4->5->17->14->15->END
9->3->4->5->17->15->END
9->3->4->5->17->18->16->15->END
9->3->4->5->17->19->18->16->15->END
9->3->4->5->24->23->22->21->20->19->17->12->13->14->15->END
9->3->4->5->24->23->22->21->20->19->17->13->14->15->END
9->3->4->5->24->23->22->21->20->19->17->14->15->END
9->3->4->5->24->23->22->21->20->19->17->15->END
9->3->4->5->24->23->22->21->20->19->17->18->16->15->END
9->3->4->5->24->23->22->21->20->19->18->16->15->END
9->3->4->5->24->23->22->21->20->19->18->17->12->13->14->15->END
9->3->4->5->24->23->22->21->20->19->18->17->13->14->15->END
9->3->4->5->24->23->22->21->20->19->18->17->14->15->END
9->3->4->5->24->23->22->21->20->19->18->17->15->END
9->3->4->5->24->25->26->23->22->21->20->19->17->12->13->14->15->END
9->3->4->5->24->25->26->23->22->21->20->19->17->13->14->15->END
9->3->4->5->24->25->26->23->22->21->20->19->17->14->15->END
9->3->4->5->24->25->26->23->22->21->20->19->17->15->END
9->3->4->5->24->25->26->23->22->21->20->19->17->18->16->15->END
9->3->4->5->24->25->26->23->22->21->20->19->18->16->15->END
9->3->4->5->24->25->26->23->22->21->20->19->18->17->12->13->14->15->END
9->3->4->5->24->25->26->23->22->21->20->19->18->17->13->14->15->END
9->3->4->5->24->25->26->23->22->21->20->19->18->17->14->15->END
9->3->4->5->24->25->26->23->22->21->20->19->18->17->15->END
9->3->4->5->24->26->23->22->21->20->19->17->12->13->14->15->END
9->3->4->5->24->26->23->22->21->20->19->17->13->14->15->END
9->3->4->5->24->26->23->22->21->20->19->17->14->15->END
9->3->4->5->24->26->23->22->21->20->19->17->15->END
9->3->4->5->24->26->23->22->21->20->19->17->18->16->15->END
9->3->4->5->24->26->23->22->21->20->19->18->16->15->END
9->3->4->5->24->26->23->22->21->20->19->18->17->12->13->14->15->END
9->3->4->5->24->26->23->22->21->20->19->18->17->13->14->15->END
9->3->4->5->24->26->23->22->21->20->19->18->17->14->15->END
9->3->4->5->24->26->23->22->21->20->19->18->17->15->END
9->3->4->5->25->24->23->22->21->20->19->17->12->13->14->15->END
9->3->4->5->25->24->23->22->21->20->19->17->13->14->15->END
9->3->4->5->25->24->23->22->21->20->19->17->14->15->END
9->3->4->5->25->24->23->22->21->20->19->17->15->END
9->3->4->5->25->24->23->22->21->20->19->17->18->16->15->END
9->3->4->5->25->24->23->22->21->20->19->18->16->15->END
9->3->4->5->25->24->23->22->21->20->19->18->17->12->13->14->15->END
9->3->4->5->25->24->23->22->21->20->19->18->17->13->14->15->END
9->3->4->5->25->24->23->22->21->20->19->18->17->14->15->END
9->3->4->5->25->24->23->22->21->20->19->18->17->15->END
9->3->4->5->25->24->26->23->22->21->20->19->17->12->13->14->15->END
9->3->4->5->25->24->26->23->22->21->20->19->17->13->14->15->END
9->3->4->5->25->24->26->23->22->21->20->19->17->14->15->END
9->3->4->5->25->24->26->23->22->21->20->19->17->15->END
9->3->4->5->25->24->26->23->22->21->20->19->17->18->16->15->END
9->3->4->5->25->24->26->23->22->21->20->19->18->16->15->END
9->3->4->5->25->24->26->23->22->21->20->19->18->17->12->13->14->15->END
9->3->4->5->25->24->26->23->22->21->20->19->18->17->13->14->15->END
9->3->4->5->25->24->26->23->22->21->20->19->18->17->14->15->END
9->3->4->5->25->24->26->23->22->21->20->19->18->17->15->END
9->3->4->5->25->26->23->22->21->20->19->17->12->13->14->15->END
9->3->4->5->25->26->23->22->21->20->19->17->13->14->15->END
9->3->4->5->25->26->23->22->21->20->19->17->14->15->END
9->3->4->5->25->26->23->22->21->20->19->17->15->END
9->3->4->5->25->26->23->22->21->20->19->17->18->16->15->END
9->3->4->5->25->26->23->22->21->20->19->18->16->15->END
9->3->4->5->25->26->23->22->21->20->19->18->17->12->13->14->15->END
9->3->4->5->25->26->23->22->21->20->19->18->17->13->14->15->END
9->3->4->5->25->26->23->22->21->20->19->18->17->14->15->END
9->3->4->5->25->26->23->22->21->20->19->18->17->15->END
9->3->4->5->25->26->24->23->22->21->20->19->17->12->13->14->15->END
9->3->4->5->25->26->24->23->22->21->20->19->17->13->14->15->END
9->3->4->5->25->26->24->23->22->21->20->19->17->14->15->END
9->3->4->5->25->26->24->23->22->21->20->19->17->15->END
9->3->4->5->25->26->24->23->22->21->20->19->17->18->16->15->END
9->3->4->5->25->26->24->23->22->21->20->19->18->16->15->END
9->3->4->5->25->26->24->23->22->21->20->19->18->17->12->13->14->15->END
9->3->4->5->25->26->24->23->22->21->20->19->18->17->13->14->15->END
9->3->4->5->25->26->24->23->22->21->20->19->18->17->14->15->END
9->3->4->5->25->26->24->23->22->21->20->19->18->17->15->END
9->8->10->12->13->14->15->END
9->8->10->12->13->14->17->5->24->23->22->21->20->19->18->16->15->END
9->8->10->12->13->14->17->5->24->25->26->23->22->21->20->19->18->16->15->END
9->8->10->12->13->14->17->5->24->26->23->22->21->20->19->18->16->15->END
9->8->10->12->13->14->17->5->25->24->23->22->21->20->19->18->16->15->END
9->8->10->12->13->14->17->5->25->24->26->23->22->21->20->19->18->16->15->END
9->8->10->12->13->14->17->5->25->26->23->22->21->20->19->18->16->15->END
9->8->10->12->13->14->17->5->25->26->24->23->22->21->20->19->18->16->15->END
9->8->10->12->13->14->17->15->END
9->8->10->12->13->14->17->18->16->15->END
9->8->10->12->13->14->17->19->18->16->15->END
9->8->10->12->13->17->5->24->23->22->21->20->19->18->16->15->END
9->8->10->12->13->17->5->24->25->26->23->22->21->20->19->18->16->15->END
9->8->10->12->13->17->5->24->26->23->22->21->20->19->18->16->15->END
9->8->10->12->13->17->5->25->24->23->22->21->20->19->18->16->15->END
9->8->10->12->13->17->5->25->24->26->23->22->21->20->19->18->16->15->END
9->8->10->12->13->17->5->25->26->23->22->21->20->19->18->16->15->END
9->8->10->12->13->17->5->25->26->24->23->22->21->20->19->18->16->15->END
9->8->10->12->13->17->14->15->END
9->8->10->12->13->17->15->END
9->8->10->12->13->17->18->16->15->END
9->8->10->12->13->17->19->18->16->15->END
9->8->10->12->17->5->24->23->22->21->20->19->18->16->15->END
9->8->10->12->17->5->24->25->26->23->22->21->20->19->18->16->15->END
9->8->10->12->17->5->24->26->23->22->21->20->19->18->16->15->END
9->8->10->12->17->5->25->24->23->22->21->20->19->18->16->15->END
9->8->10->12->17->5->25->24->26->23->22->21->20->19->18->16->15->END
9->8->10->12->17->5->25->26->23->22->21->20->19->18->16->15->END
9->8->10->12->17->5->25->26->24->23->22->21->20->19->18->16->15->END
9->8->10->12->17->13->14->15->END
9->8->10->12->17->14->15->END
9->8->10->12->17->15->END
9->8->10->12->17->18->16->15->END
9->8->10->12->17->19->18->16->15->END
-------------------------------------
最短路径为:
9->8->10->12->13->14->15->END
最短路径长度为:527.137
-------------------------------------