c f用a k的步伐走步减肥

你为什么选择舞蹈呢?深圳舞蹈网小编为大家带来全世界最有天赋的芭蕾
孩子学了舞蹈要去考级吗?少儿考级有什么用?
给爵士舞者们分析爵士舞考级的技巧,爵士舞考级对舞者有什么自身的要
国标舞者需知:拉丁舞考级详细内容,国标舞的学友们,如果您是为了提
中国古典民族舞的舞蹈考级解析
近日我国非物质文化遗产代表性项目《巴当舞》在第十二届中国民间文艺
版权所有:深圳舞蹈网
客服中心:电话 0 QQ:
值班电话:
粤ICP备号-1
微信二维码某供电局线路检修班乘汽车沿南北方向检修路线。检修班的记录员把当天行车情况记录如下:到达地点 起点 A B C D E F G H I L前进方向 北 南 北 北 南 北 南 北 南 北所走路程(km) O 10 4 6 2 5 12_百度作业帮
拍照搜题,秒出答案
某供电局线路检修班乘汽车沿南北方向检修路线。检修班的记录员把当天行车情况记录如下:到达地点 起点 A B C D E F G H I L前进方向 北 南 北 北 南 北 南 北 南 北所走路程(km) O 10 4 6 2 5 12
某供电局线路检修班乘汽车沿南北方向检修路线。检修班的记录员把当天行车情况记录如下:到达地点 起点 A B C D E F G H I L前进方向 北 南 北 北 南 北 南 北 南 北所走路程(km) O 10 4 6 2 5 12 3 9 10 7(1)求J地与起点之间的路程有多少km?(2)若汽车每1km耗油0.12升。这天检修班从起点开始,最后到达J地,一共耗油多少升?(精确到0.1升)
10-4+6+2-5+12-3+9-10+7=24有24公里10+4+6+2+5+12+3+9+10+7=6868*0.12=8.16一共耗油8.2升算法设计与分析14年CH1_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
算法设计与分析14年CH1
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:963.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢关于A*问题的代码求助_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:309,411贴子:
关于A*问题的代码求助收藏
我在网上找了一段这样的代码(一会儿贴出来),用VC运行了之后反应是OK的,但是我换了一下他程序中定义的初始状态,为什么就运行不出来了呢?debug了一下,显示下面的提示:Loaded 'ntdll.dll', no matching symbolic information found.Loaded 'C:\Windows\System32\kernel32.dll', no matching symbolic information found.Loaded 'C:\Windows\System32\KernelBase.dll', no matching symbolic information found.下楼贴代码,请各路大神帮帮我。渣求帮助。
#include &Stdio.h&#include &Conio.h&#include &stdlib.h&#include &math.h&void Copy_node(struct node *p1,struct node *p2);void Calculate_f(int deepth,struct node *p);void Add_to_open(struct node *p);void Add_to_closed(struct node *p);void Remove_p(struct node *name,struct node *p);int Test_A_B(struct node *p1,struct node *p2);struct node * Solution_Astar(struct node *p);void Expand_n(struct node *p);struct node * Search_A(struct node *name,struct node *temp);void Print_result(struct node *p);/* 定义8数码的节点状态 */typedef struct node{
int s[3][3]; //当前8数码的状态
//当前空格所在行号
//当前空格所在列号
//当前代价值
//当前节点深度
//启发信息,采用数码“不在位”距离和
struct node * //指向解路径上该节点的父节点
struct node *
//指向所在open或closed表中的下一个元素};struct node s_0={{2,5,4,3,0,7,1,8,6},1,1,0,0,0,NULL,NULL}; //定义初始状态struct node s_g={{1,2,3,8,0,4,7,6,5},1,1,0,0,0,NULL,NULL}; //定义目标状态struct node *open=NULL;
//建立open表指针struct node *closed=NULL;
//建立closed表指针int sum_node=0;
//用于记录扩展节点总数
int main(void){
struct node s,*
Copy_node(&s_0,&s);
Calculate_f(0,&s);
//拷贝8数码初始状态,初始化代价值
target=Solution_Astar(&s);
//求解主程序
if(target) Print_result(target);
//输出解路径
else printf(&问题求解失败!&);
return 0;}/******************************************//*
*//******************************************/struct node * Solution_Astar(struct node *p){
struct node *n,*
Add_to_open(p);
//将s_0放入open表
while(open!=NULL)
//只要open表中还有元素,就继续对代价最小的节点进行扩展
//n指向open表中当前要扩展的元素
temp=open-& Add_to_closed(n);
if(Test_A_B(n,&s_g))
//当前n指向节点为目标时,跳出程序结束;否则,继续下面的步骤
Expand_n(n);
//扩展节点n
return NULL;}/*******************************************************//*
生成当前节点n通过走步可以得到的所有状态
*//*******************************************************/void Expand_n(struct node *p){
struct node *temp,*
if(p-&j_0&=1)
//空格所在列号不小于1,可左移{
if(temp!=NULL&&temp-&i_0==p-&i_0&&temp-&j_0-1==p-&j_0)
//新节点与其祖父节点相同 ;
//新节点与其祖父节点不同,或其父节点为起始节点{
temp=(struct node *)malloc(sizeof(struct node));
//给新节点分配空间
Copy_node(p,temp);
//拷贝p指向的节点状态
temp-&s[temp-&i_0][temp-&j_0]=temp-&s[temp-&i_0][temp-&j_0-1];
//空格左移
temp-&s[temp-&i_0][temp-&j_0-1]=0;
temp-&j_0--;
temp-&d++;
Calculate_f(temp-&d,temp);
//修改新节点的代价值
temp-&father=p;
//新节点指向其父节点
if(same=Search_A(closed,temp))
//在closed表中找到与新节点状态相同的节点{ if(temp-&f&same-&f)
//temp指向的节点,其代价比closed表中相同状态节点代价小,加入open表{ Remove_p(closed,same);
//从closed表中删除与temp指向节点状态相同的节点 Add_to_open(temp); sum_node++;}} else if(same=Search_A(open,temp))
//在open表中找到与新节点状态相同的节点{ if(temp-&f&same-&f)
//temp指向的节点,其代价比open表中相同状态节点代价小,加入open表{ Remove_p(open,same);
//从open表中删除与temp指向节点状态相同的节点 Add_to_open(temp); sum_node++;}} else
//新节点为完全不同的新节点,加入open表{ Add_to_open(temp);
sum_node++;} }}//end左移
if(p-&j_0&=1)
//空格所在列号不大于1,可右移{ temp=p-& if(temp!=NULL&&temp-&i_0==p-&i_0&&temp-&j_0+1==p-&j_0)
//新节点与其祖父节点相同 ;
//新节点与其祖父节点不同,或其父节点为起始节点{
temp=(struct node *)malloc(sizeof(struct node));
//给新节点分配空间 Copy_node(p,temp);
//拷贝p指向的节点状态 temp-&s[temp-&i_0][temp-&j_0]=temp-&s[temp-&i_0][temp-&j_0+1];
//空格右移 temp-&s[temp-&i_0][temp-&j_0+1]=0; temp-&j_0++; temp-&d++; Calculate_f(temp-&d,temp);
//修改新节点的代价值 temp-&father=p;
//新节点指向其父节点 if(same=Search_A(closed,temp))
//在closed表中找到与新节点状态相同的节点{ if(temp-&f&same-&f)
//temp指向的节点,其代价比closed表中相同状态节点代价小,加入open表{ Remove_p(closed,same);
//从closed表中删除与temp指向节点状态相同的节点 Add_to_open(temp); sum_node++;}} else if(same=Search_A(open,temp))
//在open表中找到与新节点状态相同的节点{ if(temp-&f&same-&f)
//temp指向的节点,其代价比open表中相同状态节点代价小,加入open表{ Remove_p(open,same);
//从open表中删除与temp指向节点状态相同的节点 Add_to_open(temp); sum_node++;}} else
//新节点为完全不同的新节点,加入open表{ Add_to_open(temp);
sum_node++;}}}//end右移
if(p-&i_0&=1)
//空格所在列号不小于1,上移{ temp=p-& if(temp!=NULL&&temp-&i_0==p-&i_0-1&&temp-&j_0==p-&j_0)
//新节点与其祖父节点相同 ; else
//新节点与其祖父节点不同,或其父节点为起始节点{
temp=(struct node *)malloc(sizeof(struct node));
//给新节点分配空间 Copy_node(p,temp);
//拷贝p指向的节点状态 temp-&s[temp-&i_0][temp-&j_0]=temp-&s[temp-&i_0-1][temp-&j_0];
//空格上移 temp-&s[temp-&i_0-1][temp-&j_0]=0; temp-&i_0--; temp-&d++; Calculate_f(temp-&d,temp);
//修改新节点的代价值 temp-&father=p;
//新节点指向其父节点 if(same=Search_A(closed,temp))
//在closed表中找到与新节点状态相同的节点{ if(temp-&f&same-&f)
//temp指向的节点,其代价比closed表中相同状态节点代价小,加入open表{ Remove_p(closed,same);
//从closed表中删除与temp指向节点状态相同的节点 Add_to_open(temp); sum_node++;}} else if(same=Search_A(open,temp))
//在open表中找到与新节点状态相同的节点{ if(temp-&f&same-&f)
//temp指向的节点,其代价比open表中相同状态节点代价小,加入open表{ Remove_p(open,same);
//从open表中删除与temp指向节点状态相同的节点 Add_to_open(temp); sum_node++;}}
//新节点为完全不同的新节点,加入open表{ Add_to_open(temp);
sum_node++;}}}//end上移
if(p-&i_0&=1)
//空格所在列号不大于1,下移{ temp=p-& if(temp!=NULL&&temp-&i_0==p-&i_0+1&&temp-&j_0==p-&j_0)
//新节点与其祖父节点相同 ; else
//新节点与其祖父节点不同,或其父节点为起始节点{
temp=(struct node *)malloc(sizeof(struct node));
//给新节点分配空间 Copy_node(p,temp);
//拷贝p指向的节点状态 temp-&s[temp-&i_0][temp-&j_0]=temp-&s[temp-&i_0+1][temp-&j_0];
//空格下移 temp-&s[temp-&i_0+1][temp-&j_0]=0; temp-&i_0++; temp-&d++; Calculate_f(temp-&d,temp);
//修改新节点的代价值 temp-&father=p;
//新节点指向其父节点 if(same=Search_A(closed,temp))
//在closed表中找到与新节点状态相同的节点{ if(temp-&f&same-&f)
//temp指向的节点,其代价比closed表中相同状态节点代价小,加入open表{ Remove_p(closed,same);
//从closed表中删除与temp指向节点状态相同的节点 Add_to_open(temp); sum_node++;}} else if(same=Search_A(open,temp))
//在open表中找到与新节点状态相同的节点{ if(temp-&f&same-&f)
//temp指向的节点,其代价比open表中相同状态节点代价小,加入open表{ Remove_p(open,same);
//从open表中删除与temp指向节点状态相同的节点 Add_to_open(temp); sum_node++;}} else
//新节点为完全不同的新节点,加入open表{ Add_to_open(temp);
sum_node++;} }}//end下移}
/*******************************************************//*
添加p指向的节点到open表中
*//*******************************************************/void Add_to_open(struct node *p){
struct node *p1,*p2;
//初始时p1指向open表首部
if(open==NULL)
//open表为空时,待插入节点即为open表第一个元素,open指向该元素
p-&next=NULL;
//open表不为空时,添加待插入节点,并保证open表代价递增的排序
while(p1!=NULL&&p-&f&p1-&f)
//p2始终指向p1指向的前一个元素
if(p2==NULL)
//待插入节点为当前open表最小
else if(p1==NULL)
//待插入节点为当前open表最大
p-&next=NULL;
p2-&next=p;
//待插入节点介于p2、p1之间
p2-&next=p;
p-&next=p1;
}}/*******************************************************//*
添加p指向的节点到closed表中
*//*******************************************************/void Add_to_closed(struct node *p){
if(closed==NULL)
//closed表为空时,p指向节点为closed表第一个元素,closed指向该元素
p-&next=NULL;
//closed表不为空时,直接放到closed表首部
}}/**************************************************************//*
在open表或closed表中搜索与temp指向节点状态相同的节点,
返回搜索到的节点地址
*//**************************************************************/struct node * Search_A(struct node *name,struct node *temp){
struct node *p1;
//p1指向open表或closed表
while(p1!=NULL)
if(Test_A_B(p1,temp))
//找到相同的节点,返回该节点地址
return p1;
return NULL;}/**********************************************************//*
判断两个节点A、B状态是否相同,相同则返回1,否则返回0
*//**********************************************************/int Test_A_B(struct node *p1,struct node *p2){
for(i=0;i&=2;i++)
for(j=0;j&=2;j++)
if((p2-&s[i][j])!=(p1-&s[i][j])) { flag=0; }
}}/*******************************************************//*
从open表或closed表删除指定节点
*//*******************************************************/void Remove_p(struct node *name,struct node *p){
struct node *p1,*p2;
if(name==NULL)
//如果name指向的链表为空,则不需要进行删除
else if(Test_A_B(name,p)&&name-&f==p-&f)
//指定节点为name指向的链表的第一个元素
open=name-&
name-&next=NULL;
if(Test_A_B(p1,p)&&p1-&f==p-&f)
//找到指定节点
p2-&next=p1-&
//p2始终指向p1指向的前一个元素
}}/******************************************//*
计算某个节点状态的代价值
*//******************************************/void Calculate_f(int deepth,struct node *p){
for(i=0;i&=2;i++)
//计算所有“不在位”数码的距离和
for(j=0;j&=2;j++)
switch(p-&s[i][j])
case 0: temp+=abs(i-1)+abs(j-1);
case 1: temp+=abs(i-0)+abs(j-0);
case 2: temp+=abs(i-0)+abs(j-1);
case 3: temp+=abs(i-0)+abs(j-2);
case 4: temp+=abs(i-1)+abs(j-2);
case 5: temp+=abs(i-2)+abs(j-2);
case 6: temp+=abs(i-2)+abs(j-1);
case 7: temp+=abs(i-2)+abs(j-0);
case 8: temp+=abs(i-1)+abs(j-0);
p-&f=deepth+p-&h;}/********************************************//* 将p1指向的节点状态拷贝到p2指向的节点中 *//********************************************/void Copy_node(struct node *p1,struct node *p2){
for(i=0;i&=2;i++)
for(j=0;j&=2;j++)
{ p2-&s[i][j]=p1-&s[i][j]; }
p2-&i_0=p1-&i_0;
p2-&j_0=p1-&j_0;
p2-&f=p1-&f;
p2-&d=p1-&d;
p2-&h=p1-&h;
p2-&next=p1-&
p2-&father=p1-&}/********************************************//*
输出解路径
*//********************************************/void Print_result(struct node *p){
struct node *path[100];
struct node *temp,*temp_
int i,j,k;
for(i=0;i&=99;i++)
//初始化路径指针数组
path[i]=0;
printf(&总共扩展 %d 个节点\n&,sum_node);
printf(&总共扩展 %d 层\n&,temp-&d);
printf(&*************************************************\n&);
printf(&解路径如下:\n&);
for(i=p-&d;i&=0;i--)
//存储解路径上各节点的地址
temp=temp-&
for(k=0;k&=p-&d;k++)
//输出解路径
temp=path[k];
//建立节点指点指针
printf(&第%d步 &,temp-&d); if(k-1&=0)
//输出移动策略{ temp_father=path[k-1];
if(temp-&i_0&temp_father-&i_0) printf(&—&上移\n&);
if(temp-&i_0&temp_father-&i_0) printf(&—&下移\n&);
if(temp-&j_0&temp_father-&j_0) printf(&—&左移\n&);
if(temp-&j_0&temp_father-&j_0) printf(&—&右移\n&);} else printf(&\n&); printf(&当前:f=%d,d=%d,h=%d\n&,temp-&f,temp-&d,temp-&h);
printf(&当前节点状态为:\n&);
for(i=0;i&=2;i++)
for(j=0;j&=2;j++)
printf(&%d
&,temp-&s[i][j]);
printf(&\n&);
printf(&\n&);
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 走步机 的文章

 

随机推荐