帮忙编译下,有几个错误,想不明白,求指教!
//................................................
//.......IQGrame.cpp
//................................................
#include<iostream>
using namespace std;
#define VertexNum 256;//最大顶点数。因为有八个人,每个人过不过岸有两种情况,总共是2的八子方。
//.................................................
typedef struct{ //顶点(包含每个人的状态)
int dad; //爸爸
int mom; //妈妈
int son1; //儿子1
int son2; //儿子2
int daughter1; //女儿1
int daughter2; //女儿2
int poilce; //警察
int criminal; //罪犯
}Vertex;//..........................................
typedef struct{ //定义图的邻接矩阵存储结构
int vertexNum; //图的当前顶点数
Vertex vertex [VertexNum]; //顶点向量(代表顶点)
bool Edge[VertexNum][VertexNum]; //邻接矩阵,用于存储图中的边,其矩阵元素个数取决于顶点个数,与边数无关
}AdjGraph;//.........................................
bool visited[VertexNum] = {false}; //对已经访问的顶点进行标记
int retpath[VertexNum] = {-1}; //保存搜索路径
//返回vertex[VertexNum]对应的下标
int locate(AdjGraph* graph,int dad,int mom,int son1,int son2,int daughter1,int daughter2,int poilce,int criminal){
for(int i=0;i<=graph->vertexNum;i++){
if((graph->vertex[i].dad==dad)&&(graph->vertex[i].mom==mom)&&(graph->vertex[i].son1==son1)&&
(graph->vertex[i].son2==son2)&&(graph->vertex[i].daughter1==daughter1)&&
(graph->vertex[i].daughter2==daughter2)&&(graph->vertex[i].poilce==poilce)&&
(graph->vertex[i].criminal==criminal)){
return i;
}
}
return -1;
}
//深度优先搜素从u到v的简单路径 //DFS--Depth First Search
void dfsPath(AdjGraph* graph,int start,int end){
int i=0;
visited[start]=true; //标记已访问过的顶点
if(start==end){
return;
}
for(i=0;i<graph->vertexNum;i++){
if(graph->Edge[start][i] && !visited[i]){
retpath[start]=i;
dfsPath(graph,i,end);
}
}
}
//判断这个顶点组合是否安全
bool isSafe(int dad,int mom,int son1,int son2,int daughter1,int daughter2,int poilce,int criminal){
if((poilce!=criminal) && ((dad!=mom)&&((dad==daughter1)||(dad==daughter2)))&&
((dad!=mom)&&((mom==son1)||(dad==son2)))){
return false;
}else{
return true;
}
}
//判断状态i与状态j之间是否可转换
bool isConnect(AdjGraph* graph,int i,int j){
int k=0,
int m=0;
if(graph->vertex[i].dad != graph->vertex[j].dad){
k++;
}
if(graph->vertex[i].mom!= graph->vertex[j].mom){
k++;
}
if(graph->vertex[i].son1!= graph->vertex[j].son1){
k++;
}
if(graph->vertex[i].son2 != graph->vertex[j].son2){
k++;
}
if(graph->vertex[i].daughter1 != graph->vertex[j].daughter1){
k++;
}
if(graph->vertex[i].daughter2 != graph->vertex[j].daughter2){
k++;
}
if(graph->vertex[i].poilce != graph->vertex[j].poilce){
k++;
}
if(graph->vertex[i].criminal != graph->vertex[j].criminal){
k++;
}
if((graph->vertex[i].dad != graph->vertex[j].dad) || (graph->vertex[i].mom!= graph->vertex[j].mom)||
(graph->vertex[i].poilce != graph->vertex[j].poilce)){
m++;
}
if(k<=2&&m){
return true;
}else{
return false;
}
}
//创建连接图
void CreateG(AdjGraph* graph){
int i=0;
int j=0;
//生产所有安全的顶点
for(int dad=0;dad<=1;dad++){
for(int mom=0;mom<=1;mom++){
for(int son1=0;son1<=1;son1++){
for(int son2=0;son2<=1;son2++){
for(int daughter1=0;daughter1<=1;daughter1++){
for(int daughter2=0;daughter2<=1;daughter2++){
for(int poilce=0;poilce<=1;poilce++){
for(int criminal=0;criminal<=1;criminal++){
if(isSafe(dad,mom,son1,son2,daughter1,daughter2,poilce,criminal)){
graph->vertex[i].dad=dad;
graph->vertex[i].mom=mom;
graph->vertex[i].son1=son1;
graph->vertex[i].son2=son2;
graph->vertex[i].daughter1=daughter1;
graph->vertex[i].daughter2=daughter2;
graph->vertex[i].poilce=poilce;
graph->vertex[i].criminal=criminal;
i++;
}
}
}
}
}
}
}
}
}
//邻接矩阵初始化,即建立邻接矩阵
graph->vertexNum=i;
for(i=0;i<graph->vertexNum;i++){
for(j=0;j<graph->vertexNum;j++){
//状态i与状态j 之间转化,初始化为true,否则为false
if(isConnect(graph,i,j)){
graph->Edge[i][j]=true;
}else{
graph->Edge[i][j]=false;
}
}
}
return ;
}
int main(){
AdjGraph graph;
CreateG(&graph);
int start = locate(&graph,0,0,0,0,0,0,0,0);
int end = locate(&graph,1,1,1,1,1,1,1,1);
dfsPath(&graph,start,end);
if(visited[end]){
cout<<"ok";
}
return -1;
}