简易导航系统

 

  

建筑物对应的序号: 

判断两点是否可达的邻接矩阵:

每个地点的坐标: 

主要用了深度优先搜索(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
-------------------------------------

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值