华为2014上机考试样题_高级题_地铁换乘最短路径_无向无权图+邻接表存储+BFS广度优先算法

/*
Copyright (c) 2013, [email protected]

华为2014上机考试样题 高级题 地铁换乘 最短路径
http://company.dajie.com/huawei/job/nj/topic/206708/detail

无向无权图 邻接表存储 BFS广度优先算法搜索
涉及:图 链表 队列 指针 数组 字符串 类型转换

供参考

*/

/*

						A10-----A11-----A12-----A13
						|						 |
	B1--B2--B3--B4--B5--T1--B6--B7--B8--B9--B10--T2--B11--B12--B13--B14--B15
						|						 |
						A9						 A14
						|						 |
						A8						 A15
						|						 |
						A7						 A16
						|						 |
						A6						 A17
						|						 |
						A5---A4---A3---A2---A1---A18
						

*/

#include <iostream>
#include <string> //用到字符串操作
#include <sstream> //int转string,用到流操作

using namespace std; //标准库命名空间

#define DEBUG //是否为调试模式

#define VerNum 35 //定义顶点数为35 = 18(A) + 15(B) + 2(T)
#define NULL 0 //定义空指针

typedef int Boolean; //定义布尔类型,为int类型别名,适用于访问标志visited
#define TRUE 1 //定义TRUE为1
#define FALSE 0 //定义FALSE为0


/*********************字符串数组与编号映射*************************************

A
data:	A1	A2	A3	A4	A5	A6	A7	A8	A9	A10	A11	A12	A13	A14	A15	A16	A17	A18
index:	0	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17

B
data:	B1	B2	B3	B4	B5	B6	B7	B8	B9	B10	B11	B12	B13	B14	B15
index:	18	19	20	21	22	23	24	25	26	27	28	29	30	31	32

T
data:	T1	T2
index:	33	34

*/
string Data[VerNum];	//字符串数组,用于存储输入的字符串,数据和下标构成上述映射关系
						//全局变量。。
string intToString(int index)	//int转string,用于下述initD()的字符串序号
{
	stringstream str1;
	string str2;
	str1 << index;
	str1 >> str2;
	return str2;
}
void InitData()	//初始化字符串数组,完成映射
{
	int index;
	//A1-A18, index 0-17
	for(index=0; index<18; index++)
	{
		Data[index] = "A" + intToString(index+1);
	}
	//B1-B15, index 18-32
	for(index=18; index<33; index++)
	{
		Data[index] = "B" + intToString(index-18+1);
	}
	//T1-T2, index 33-34
	Data[33] = "T1";
	Data[34] = "T2";
}
/*********************************************************************************************/

int dataToIndex(string str)	//查找输入字符串的相应index
{
	int index;
	for(index=0; index<VerNum; index++)
	{
		if(strcmp(str.c_str(), Data[index].c_str()) == 0)	//比较输入字符串str与数据数组Data[]的各元素,相等则返回该元素下标index
			break;
	}
	return index;
}

/**************************************************************邻接表存储图信息******************************

Data	index		顶点表GraphList				第一边表e1[35]			第二边表e2[33]			第三边表e3[2]			第四边表e4[2]
					verIndex	firstedge	eVerIndex	nextEdge	eVerIndex	nextEdge	eVerIndex	nextEdge	eVerIndex	nextEdge
-----------------------------------------------------------------------------------------------------------------------------------------------
A1		0		|		0		-->		|e1[0]	1		-->		|e2[0] 17		-->NULL	|
-----------------------------------------------------------------------------------------------------------------------------------------------
A2		1		|		1		-->		|		2		-->		|		0		-->NULL	|
-----------------------------------------------------------------------------------------------------------------------------------------------
A3		2		|		2		-->		|		3		-->		|		1		-->NULL	|
-----------------------------------------------------------------------------------------------------------------------------------------------
A4		3		|		3		-->		|		4		-->		|		2		-->NULL	|
-----------------------------------------------------------------------------------------------------------------------------------------------
A5		4		|		4		-->		|		5		-->		|		3		-->NULL	|
-----------------------------------------------------------------------------------------------------------------------------------------------
A6		5		|		5		-->		|		6		-->		|		4		-->NULL	|
--------------------------------------------------------------------------------------------------------------------
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值