八数码问题的深度优先搜索,怎么运行没结果啊?希望高手给看看,谢谢哈!

snowyjy 2011-11-05 03:53:18
#include <stdio.h>
#include<stdlib.h>
#define COL 3
#define ROW 3
#define TOTAL 9
struct STATE
{
int matrix[TOTAL];
struct STATE *parent;
};
typedef struct STATE State;
struct QUEUE
{
struct STATE *current;
struct QUEUE *next;
int flag;
};
typedef struct QUEUE Queue;
int DFSSolve(int *,int *);
int EnqueueChild(State *);
int MoveAndEnqueue(State *, int, int );
State *StateConstruct(int *, State *);
Queue *QueueConstruct(State *);
int IsEqual(int *, int *);
int ShowSolutionPath(State *);
int Destruct();
int openDequeue();
int closedDequeue();
Queue *openHead = NULL;
Queue *openTail = NULL;
Queue *closedHead = NULL;
Queue *closedTail = NULL;

int main()
{
int initial[TOTAL],goal[TOTAL];
int i;
printf("Initial:\n");
for(i=0;i<TOTAL;i++)
scanf("%d",&initial[i]);

printf("\nGoal:\n");
for(i=0;i<TOTAL;i++)
scanf("%d",&goal[i]);

DFSSolve(initial,goal);
return 0;
}


int DFSSolve( int *entryArray, int *goal)
{
State *entryState = StateConstruct(entryArray,NULL);
openHead = QueueConstruct(entryState);
openTail = openHead;

while( ! IsEqual(openHead->current->matrix,goal) )
{
if((openHead->flag)!=1)
{
openHead->flag=1;
EnqueueChild(openHead->current);

}
openHead= openHead->next;

}
ShowSolutionPath(openHead->current);
Destruct();
return 1;
} /*end BFSSolve()*/
int EnqueueChild(State *parent)
{
int i;
for(i=0;i<TOTAL;i++)
{
if(parent->matrix[i]==0)
{
if( (i+1)/COL == i/COL )
MoveAndEnqueue(parent,i,i+1);
if( (i-1+COL)/COL == (i+COL)/COL ) /*excluding 0-1*/
MoveAndEnqueue(parent,i,i-1);
if( i+COL < TOTAL )
MoveAndEnqueue(parent,i,i+COL);
if( i-COL >= 0 )
MoveAndEnqueue(parent,i,i-COL);
break;
}
}

return 0;
}
int MoveAndEnqueue(State *parent,int x, int y)
{
State *state = StateConstruct(parent->matrix,parent);
Queue *queue=(Queue*)malloc(sizeof(Queue));
queue= QueueConstruct(state);
queue->next=NULL;
state->matrix[x] = parent->matrix[y];
state->matrix[y] = parent->matrix[x];
queue->next=openHead;
openHead = queue ;
return 0;
} /*end MoveAndEnqueue()*/
State *StateConstruct(int *matrix,State *parent)
{
int i;
State *state = (State*)malloc(sizeof(State));
if( state==NULL )
{
Destruct();
exit(0);
}
for(i=0;i<TOTAL;i++)
state->matrix[i] =matrix[i];
state->parent =parent;
return state;
} /*end StateConstruct()*/
Queue *QueueConstruct(State *state)
{
Queue *queue = (Queue*)malloc(sizeof(Queue));
if( queue==NULL )
{
Destruct();
exit(0);
}
queue->current = state;
queue->next = NULL;
queue->flag=0;
return queue;
} /*end QueueConstruct()*/
int IsEqual(int *matrix, int *goal)
{
int i;
for(i=0;i<TOTAL;i++)
if(matrix[i] != goal[i])
return 0;
return 1;
} /*end IsEqual()*/

int ShowSolutionPath(State *state)
{
State *curState = state;
Queue *curQueue = NULL;
Queue *lastQueue = NULL;
Queue *temp;
int i;
while(curState != NULL)
{
curQueue = (Queue*)malloc(sizeof(Queue));
if( curQueue==NULL )
{
while(curQueue != NULL)
{
temp = curQueue;
curQueue = curQueue->next;
free(temp);
}
Destruct();
exit(0);
}
///////////前插法,将链表逆序
curQueue->current = curState;
curQueue->next = lastQueue;
lastQueue = curQueue;
curState = curState->parent;
}
while(curQueue != NULL)
{
for(i=0;i<TOTAL;i++)
{
if( i%COL == 0) printf("\n");
printf("%d ",curQueue->current->matrix[i]);
}
temp = curQueue;
curQueue = curQueue->next;
free(temp);
printf("\n");
}
return 0;
}
int Destruct()
{
Queue *temp;

while(openHead != NULL)
{
free(openHead->current);
temp = openHead;
openHead = openHead->next;
free(temp);
}
return 0;
}
int openDequeue()
{
Queue *headTemp;
headTemp = openHead;
openHead = openHead->next;
free(headTemp->current);
free(headTemp);
return 0;
}
int closedDequeue()
{
Queue *headTemp;
headTemp = openHead;
openHead = openHead->next;
free(headTemp->current);
free(headTemp);
return 0;
}
...全文
165 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-11-05
  • 打赏
  • 举报
回复
怎么说也应该是做广度搜索。
内容概要:本文围绕不确定环境下的多式联运路径优化问题展开研究,提出并实现了基于AFO算法、遗传算法(GA)和粒子群优化算法(PSO)的三种智能优化方法,并借助Matlab平台完成算法编程与仿真。研究构建了考虑时间、成本、转运风险等多重不确定因素的路径优化模型,系统比较了AFO、GA、PSO三种算法在收敛速度、全局寻优能力和稳定性方面的表现,同时引入Matlab自带的全局优化搜索器作为基准对照,深入分析各算法在复杂物流网络中的适用边界与性能差异。研究表明,AFO算法在解决此类组合优化问题时展现出更快的收敛效率和更强的局部规避能力。; 适合人群:具备一定Matlab编程基础与运筹优化知识,从事物流工程、交通运输规划、智能算法开发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多式联运、综合货运网络中的路径决策支持系统构建;②为不确定性条件下复杂路径规划问题提供智能算法选型依据与技术实现方案;③支持科研人员复现主流优化算法并开展横向性能对比实验,推动算法改进与实际落地。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现流程,重点理解目标函数设计、约束条件处理及参数敏感性分析部分,可通过调整问题规模与算法参数进行对比实验,进一步拓展至动态路径规划或大规模网络优化等延伸场景。
内容概要:本文研究了基于QLearning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制中的应用,通过Matlab代码实现了控制算法的仿真验证。该方法融合强化学习的在线自适应能力与传统PID控制的稳定性优势,利用QLearning算法动态优化PID控制器的比例、积分、微分参数,以应对水下复杂流体环境、模型不确定性及外部干扰等挑战,从而提升AUV轨迹跟踪的精度、鲁棒性与动态响应性能。文中系统阐述了AUV的六自由度非线性动力学建模过程、QLearning算法的状态空间与动作空间设计、奖励函数构造及训练机制,并详细说明了PID参数自整定的闭环控制架构。仿真结果表明,相较于传统固定参数PID控制器,该智能控制策略在多种工况下均展现出更优的控制效果,有效抑制了超调,加快了响应速度,并增强了抗干扰能力。; 适合人群:具备自动控制理论、强化学习基础及Matlab/Simulink仿真能力,从事水下机器人、智能控制、海洋工程、自动化等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于AUV、UUV等无人水下平台的高精度自主导航与运动控制;②为解决非线性、强耦合、时变系统的控制器参数自适应整定问题提供智能化解决方案;③作为强化学习与经典控制理论深度融合的技术范例,推动智能控制算法在海洋装备中的工程化应用。; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节,重点剖析QLearning的状态-动作-奖励机制设计、PID参数更新逻辑及仿真对比实验结果,有条件者可在更复杂的动力学模型或实际硬件平台上进一步验证与优化算法性能。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧