一、题目
设G=(V,E)是一个连通的无向图。请给出一个O(V+E)时间的算法,以计算图G中的一条路径,对于E中的每一条 边,该路径恰好在每一个方向上遍历一次。如果你身处一个迷宫之中,说明如何才能找到出路。
二、思考
直觉就是说DFS,这一节讲的是BFS,不知道怎么用BFS处理
三、代码
1.Link_Graph.h
#include <iostream>
#include <queue>
using namespace std;
#define N 100
#define UNUSED 0
#define USED 1
queue<int> Q;
struct Vertex;
//每条边代表一场比赛,如果一端的顶点是坏的,那么另一端的顶点必须是好的
struct Edge
{
bool IsUsed;
int start;
int end;
int value;
Edge *next;
Edge *nextDFS;
Edge(int s, int e, int v)
:IsUsed(UNUSED),start(s),end(e),value(v),next(NULL),nextDFS(NULL){}
};
//每个顶点代表一个摔跤手,增加一个属性type,用于定义这个摔跤手是好的还是坏的
struct Vertex
{
Edge *head;
Vertex():head(NULL){};
};
class Link_Graph
{
public:
int n;
Vertex *V;
Link_Graph(int num):n(num)
{
V = new Vertex[n+1];
}
~Link_G