Skip to content

Commit

Permalink
第四次作业题目补充
Browse files Browse the repository at this point in the history
  • Loading branch information
HELLORPG authored Oct 11, 2018
1 parent 255d2de commit d20dac2
Showing 1 changed file with 46 additions and 10 deletions.
56 changes: 46 additions & 10 deletions 最短路径队列解法.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,39 @@
/*
题目描述:
小张同学来到南大一年多,对南大各个建筑的位置已经了如指掌。现在他想知道,从他所在的位置去指定教室的最短路径有多长。设计算法帮助小张解决这个问题,要求使用队列。
输入:
第一行为两个整数n和m,表示学校地图的长和宽。
接下来n行,每行有m个字符,’o’表示可以到达的地方,’x’表示不能到达的地方,’z’表示小张所处位置,’d’表示小张要去的教室。 各字符之间有空格。
输出:
一个整数,表示小张去指定教室的最短路径长度。如果没有路径可以到达则输出-1。
样例输入:
5 5
o o o o o
o o o o o
o o x d o
o o z x o
o o o o o
4 6
x x x x o o
x o x x o x
d o o x z x
o x o o x x
样例输出:
6
-1
*/



#include <iostream>
#include <algorithm>

Expand Down Expand Up @@ -40,12 +76,12 @@ int main()
char input;
cin >> input;
map[i][j].data = input;
map[i][j].flag = true;//true代表没有访问
map[i][j].flag = true;//true代表没有访问
}
}
//输入所有的地图标识
//如若是栈实现,可以使用深度优先算法,而队列的话,最好的方法是广度优先算法
//广度优先算法,类似于树的向下查找
//输入所有的地图标识
//如若是栈实现,可以使用深度优先算法,而队列的话,最好的方法是广度优先算法
//广度优先算法,类似于树的向下查找
FindTheWay *FINDHEAD = new FindTheWay{ -1,-1,-1,nullptr };
Distance *DISHEAD = new Distance{ -1,nullptr };
cout << FindWay(FINDHEAD, DISHEAD, map, n, m) << endl;
Expand Down Expand Up @@ -79,13 +115,13 @@ int FindWay(FindTheWay* FINDHEAD, Distance* DISHEAD, Map** map, int n, int m)

map[begin_row][begin_col].flag = false;
FindTheWay *begin = new FindTheWay{ begin_row, begin_col, 0, nullptr };
FINDHEAD->next = begin;//提供了第一个节点,不便于放在通式里面进行计算
FINDHEAD->next = begin;//提供了第一个节点,不便于放在通式里面进行计算
findtail = begin;
FINDHEAD = begin;//此时的头和尾都是同一个位置
FINDHEAD = begin;//此时的头和尾都是同一个位置

while (!Empty(FINDHEAD))
{
if (FINDHEAD->col == end_col && FINDHEAD->row == end_row)//此时是到达了终点
if (FINDHEAD->col == end_col && FINDHEAD->row == end_row)//此时是到达了终点
{
Distance *dis_p = new Distance{ FINDHEAD->distance, nullptr };
//cout << "dis_p"<<dis_p << endl;
Expand All @@ -95,10 +131,10 @@ int FindWay(FindTheWay* FINDHEAD, Distance* DISHEAD, Map** map, int n, int m)
FINDHEAD = FINDHEAD->next;
delete findkill;
}
//如果没有到达终点,就应该遍历周围的所有
//如果没有到达终点,就应该遍历周围的所有
else
{
map[FINDHEAD->row][FINDHEAD->col].flag = false;//标记这一位已经遍历
map[FINDHEAD->row][FINDHEAD->col].flag = false;//标记这一位已经遍历
if (FINDHEAD->row - 1 >= 0 && map[FINDHEAD->row - 1][FINDHEAD->col].flag)
{
FindTheWay *find_p = new FindTheWay{ FINDHEAD->row - 1, FINDHEAD->col, FINDHEAD->distance + 1,nullptr };
Expand Down Expand Up @@ -154,5 +190,5 @@ bool Empty(FindTheWay* HEAD)
bool flag(false);
(HEAD == nullptr) ? (flag = true) : (flag = false);
return flag;
}
}

0 comments on commit d20dac2

Please sign in to comment.