/**
* 实验题目:
* 求无向图中满足约束条件的路径
* 实验目的:
* 掌握深度优先遍历算法在求解图路径搜索问题中的应用。
* 实验内容:
* 编写一个程序,设计相关算法,从如图8.24所示的无向图G中找出满足如下
* 条件的所有路径:
* 1、给定起点u和终点v。
* 2、给定一组必经点,即输出的路径必须包含这些顶点。
* 3、给定一组必避点,即输出的路径不能包含这些顶点。
* 采用全局变量V1[0..n-1]表示必经点,V2[0..m-1]表示必避点。
*/
#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>
#define INF 32767 //定义∞
#define MAXV 100 //最大顶点个数
typedef char InfoType;
/*-------------------------以下定义邻接矩阵类型---------------------------*/
typedef struct
{
int no; //顶点编号
InfoType info; //顶点信息
}VertexType; //顶点类型
typedef struct
{
int edges[MAXV][MAXV]; //邻接矩阵数组(用一个二维数组存放顶点间关系(边或弧)的数据)
int n; //顶点数
int e; //边数
VertexType vexs[MAXV]; //存放顶点信息(用一个一维数组存放图中所有顶点数据)
}MatGraph; //完整的图邻接矩阵类型
//邻接表表示法-将每个顶点的邻接点串成一个单链表
/*-----------以下定义邻接表类型--------------*/
typedef struct ArcNode
{
int adjvex; //该边的邻接点编号
struct ArcNode *nextarc; //指向下一条边的指针
int weight; //该边的相关信息,如权值(用整型表示)
}ArcNode; //边结点类型
typedef struct VNode
{
InfoType info; //顶点其他信息
int cnt; //存放顶点入度,仅用于拓扑排序
ArcNode *firstarc; //指向第一条边
}VNode; //邻接表结点类型
typedef struct
{
VNode adjlist[MAXV]; //邻接表头结点数组
int n; &nbs