帮忙编译下,有几个错误,想不明白,求指教!

yanghan111 yanghan111 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
//................................................
//.......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;


}





...全文
评论 1
收藏 已收藏
分享
返回顶部
yanghan111
C语言 70,039 成员 243,237 内容