#pragma once
#include <list>
#include <vector>
#include <queue>
#include <map>
using namespace std;
struct NodeData
{
//
bool IsSwitchStatin;
unsigned int LineNO;
unsigned int StationNO;
//
list<unsigned int> Lines;
};
const unsigned int NotSearch = 0;
static const size_t InitalSize = 10000;
class Graph
{
private:
map<unsigned int, unsigned> StationMap;
vector<NodeData> Data;
private:
friend void SetData(Graph &G);
public:
Graph()
{
Data.reserve(InitalSize);
}
public:
bool FindStation(unsigned int LineNumber, unsigned int StationNumbe)
{
}
void AddStation(unsigned int LineNumber, unsigned int StationNumber)
{
}
unsigned int CalcMinPatch(unsigned int DepartureStation, unsigned int DestStation)
{
queue<unsigned int, list<unsigned int>> StationQueue;
StationQueue.push(DepartureStation);
vector<unsigned int> Priority(Data.size(), 0);
unsigned int CurrentStation;
while (StationQueue.empty() == false)
{
CurrentStation = StationQueue.front();
StationQueue.pop();
if (CurrentStation == DestStation)
{
continue;
}
for (auto &NextSation : Data[CurrentStation].Lines)
{
if (Priority[NextSation] == NotSearch)
{
Priority[NextSation] = Priority[CurrentStation] + 1;
StationQueue.push(NextSation);
}
else if (Priority[NextSation] > Priority[CurrentStation] + 1)
{
Priority[NextSation] = Priority[CurrentStation] + 1;
}
}
}
return Priority[DestStation];
}
};
void SetData(Graph &G)
{
NodeData Node;
for (unsigned int I = 0; I <= 12; ++I)
{
Node.StationNO = I;
G.Data.push_back(Node);
}
//
G.Data[1].Lines.push_back(2);G.Data[2].Lines.push_back(1);
G.Data[2].Lines.push_back(3);G.Data[3].Lines.push_back(2);
G.Data[3].Lines.push_back(4);G.Data[4].Lines.push_back(3);
G.Data[4].Lines.push_back(5);G.Data[5].Lines.push_back(4);
G.Data[2].Lines.push_back(6);G.Data[6].Lines.push_back(2);
G.Data[3].Lines.push_back(6);G.Data[6].Lines.push_back(3);
G.Data[12].Lines.push_back(11);G.Data[11].Lines.push_back(12);
G.Data[6].Lines.push_back(11);G.Data[11].Lines.push_back(6);
G.Data[5].Lines.push_back(10);G.Data[10].Lines.push_back(5);
G.Data[10].Lines.push_back(8);G.Data[8].Lines.push_back(10);
G.Data[4].Lines.push_back(8);G.Data[8].Lines.push_back(4);
G.Data[7].Lines.push_back(9);G.Data[9].Lines.push_back(7);
}
宽度优先搜索图
最新推荐文章于 2022-10-15 11:20:25 发布