**题意:**使用四种颜色对N块区域涂色,输出所有涂色方案
**解题思想:**使用图的遍历来做,每块区域抽象为图顶点,四种颜色,回溯遍历涂色
**回溯概念:**回溯与递归联系十分紧密,递归的过程包括正向递归调用以及反向回退,一般我们使用递归大多数情况下正向递归调用即可解决,而回溯是指,除了正向递归调用,在回退时候我们也要处理,一般这个处理就是对正向递归调用的“恢复”,具体问题还是以具体问题去理解
C代码如下(使用文件读取数据,文件见文末):
#include <stdio.h>
#include<stdlib.h>
#define DEBUG
#define MAXVEX 100 //最大顶点数
int count=0;
typedef struct ArcNode//边表结点
{
int adjvex;//邻接点域,存储该顶点对应的下标
int weight;//用于存储权值,对于非网图可以不需要
struct ArcNode *nextarc; //链域,指向下一个邻接点
} ArcNode;
typedef struct VNode//顶点表结点
{
int data;//顶点域,存储顶点信息
ArcNode *firstarc;//边表头指针
int color;
} VNode, AdjList[MAXVEX];
typedef struct
{
AdjList adjList;
int numNodes, numEdges; // 图中当前顶点数和边数
} GraphAdjList;
void CreateALGraph(GraphAdjList *Gp)
{
int i, j, k;
ArcNode *pe;
FILE *fp;
fp=fo