问王者荣耀头像框怎么改
王者荣耀头像
-
小狐狸Diane
你给的这个例子貌似无解,下面是用a*算法写的八数码程序代码,当然也可以用广搜来做
a*算法求解八数码问题
估价函数选择不在位数与当前结点深度之和
123456780->271853406(step=17)约52s
include
include
using namespace std;typedef struct node
{
char data[9];int depth,not_in_pos;node*father,*pre,*next;}tstat;int step=0;统计总共走了多少步
tstat*get_eva_function(tstat*start)/返回估价函数最小的结点
{
tstat*i,*p;int min,eva;i=p=start;min=eva=i->not_in_pos+i->depth;for;i;i=i->next)
{
eva=i->not_in_pos+i->depth;if(min>eva)
{
min=eva;p=i;}
}
return(p);}
tstat*create_data()/创建数据
{
tstat*st=new tstat;string s;int i,j,slen=0;bool b;cin>>s;while(s[slen])slen+;if(slen!9)
{
cout输入错误!return(**);}
for(i=0;i;i+)
{
st->data[i]=s[i];b=true;for(j=0;j;j+)
if(st->data[i]=st->data[j])
{
b=false;break;}
if!(st->data[i]>='0'&st->data[i])|!b))
{
cout输入错误!return(**);}
}
st->depth=0;st->father=st->pre=st->next=**;return(st);}
bool cansolve(tstat*st,tstat*ta)/判断是否有解,根据逆序数奇偶性相同否判断
{
int i,j,num_st=0,num_ta=0;for(i=0;i;i+)
for(j=0;j;j+)
{
if(st->data[j]<st->data[i]&st->data[j]!'0')
num_st+;if(ta->data[j]<ta->data[i]&ta->data[j]!'0')
num_ta+;}
num_st=num_st-(num_st/2)*2;num_ta=num_ta-(num_ta/2)*2;if((num_st=0&num_ta=0)|(num_st=1&num_ta=1))
return(true);else
{
cout无解!return(false);}
}
void print_stat(tstat*st)/格式化输出状态结点中数据
{
int i,j;for(i=0;i;i+)
{
for(j=0;j;j+)
cout<<st->data[i*3+j];cout;}
}
void print_data(tstat*st)/输出函数
{
if(st)
{
print_data(st->father);cout;cout;print_stat(st);cout;}
}
bool **same(tstat*st1,tstat*st2)/判断st1和st2是否相同
{
int i;bool b=true;for(i=0;i;i+)
if(st1->data[i]!st2->data[i])
{
b=false;break;}
return(b);}
bool **ok(tstat*st,tstat*pos)/判断st是否出现过
{
tstat*p;bool b=true;for(p=pos;p;p=p->father)
if(st->data=p->data)
{
b=false;break;}
return(b);}
int find0(tstat*st)/返回0所在位置
{
int i,pos;for(i=0;i;i+)
if(st->data[i]='0')
{
pos=i;break;}
return(pos);}
int get_nip(tstat*st,tstat*ta)/计算not_in_pos值
{
int i,nip=0;for(i=0;i;i+)
if(st->data[i]!ta->data[i])
nip+;return(nip);}
tstat*calc_path(tstat*start,tstat*target)/寻找路径,返回找到后的目标结点
{
tstat*p,*q,*r,*st=start;int zpos,i;char tch;p=st;while((p)&!**same(p,target)))
{
r=p->pre;zpos=find0(p);if(zpos!0&zpos!3&zpos!6)/左移
{
if!(q=new tstat))
{
cout内存分配失败!\n;return(**);}
for(i=0;i;i+)q->data[i]=p->data[i];tch=q->data[zpos];q->data[zpos]=q->data[zpos-1];q->data[zpos-1]=tch;q->depth=p->depth+1;q->father=p;q->pre=r;q->next=**;q->not_in_pos=get_nip(q,target);if(**ok(q,p))
{
if(r)
r->next=q;else
st=q;r=q;}
else
delete q;}
if(zpos!2&zpos!5&zpos!8)/右移
{
if!(q=new tstat))
{
cout内存分配失败!\n;return(**);}
for(i=0;i;i+)q->data[i]=p->data[i];tch=q->data[zpos];q->data[zpos]=q->data[zpos+1];q->data[zpos+1]=tch;q->depth=p->depth+1;q->father=p;q->pre=r;q->next=**;q->not_in_pos=get_nip(q,target);if(**ok(q,p))
{
if(r)
r->next=q;else
st=q;r=q;}
else
delete q;}
if(zpos!0&zpos!1&zpos!2)/上移
{
if!(q=new tstat))
{
cout内存分配失败!\n;return(**);}
for(i=0;i;i+)q->data[i]=p->data[i];tch=q->data[zpos];q->data[zpos]=q->data[zpos-3];q->data[zpos-3]=tch;q->depth=p->depth+1;q->father=p;q->pre=r;q->next=**;q->not_in_pos=get_nip(q,target);if(**ok(q,p))
{
if(r)
r->next=q;else
st=q;r=q;}
else
delete q;}
if(zpos!6&zpos!7&zpos!8)/下移
{
if!(q=new tstat))
{
cout内存分配失败!\n;return(**);}
for(i=0;i;i+)q->data[i]=p->data[i];tch=q->data[zpos];q->data[zpos]=q->data[zpos+3];q->data[zpos+3]=tch;q->depth=p->depth+1;q->father=p;q->pre=r;q->next=**;q->not_in_pos=get_nip(q,target);if(**ok(q,p))
{
if(r)
r->next=q;else
st=q;r=q;}
else
delete q;}
r->next=p->next;if(p->next)
p->next->pre=r;p->pre=p->next=**;p=get_eva_function(st);}
return(p);}
int main()/主函数
{
tstat*start,*target,*p;cout请输入初始状态(0~8,0为空):";if(start=create_data())
{
cout请输入目标状态(0~8,0为空):";if(target=create_data())
{
if(cansolve(start,target))
{
if(p=calc_path(start,target))
print_data(p);}
}
}
return(0);} 展开
-
问 王者荣耀怎么改头像框
提问时间:2024-05-18 00:16:55
答 王者荣耀怎么改头像框 王者荣耀爱心熊猫头像框获取方法:这个头像框的造型还没放出来,正式服显示的也是“?”,不过可以从名字来猜测头像框的获取方法:猜测一、头像框兑...
-
问 王者荣耀怎么换头像框
提问时间:2024-05-18 11:17:54
答 王者荣耀怎么换头像框 乱世王者头像框怎么得?通过一些指定活动玩家可以获得玉玺,使用玉玺可以用来兑换乱世王者头像框。1.8月16日~8月21日用指定英雄参加5V5...
-
问 王者荣耀改头像
提问时间:2024-05-18 05:32:50
答 王者荣耀改头像 王者荣耀是一款风靡全球的MOBA游戏,众多玩家都希望能够在游戏中展现自己的个性和风格。而更换头像就是展示个性的重要方式之一。在本文中,将为大家介...
-
问 王者荣耀的头像框
提问时间:2024-05-18 04:34:37
答 王者荣耀的头像框 乱世王者头像框怎么得?通过一些指定活动玩家可以获得玉玺,使用玉玺可以用来兑换乱世王者头像框。1.8月16日~8月21日用指定英雄参加5V5匹配...
-
问 王者荣耀上框头像怎么弄
提问时间:2024-05-18 21:33:04
答 王者荣耀上框头像怎么弄 王者荣耀是一款非常受欢迎的多人在线战斗游戏,游戏中的头像是玩家展示自己形象和个性的重要方式之一。在游戏中,如何上框头像呢?下面就为大家详...
-
问 怎么换王者荣耀框框头像
提问时间:2024-05-18 00:52:36
答 怎么换王者荣耀框框头像 想要换王者荣耀框框头像,首先需要了解王者荣耀头像的种类和获取方式。在王者荣耀游戏中,头像主要分为两种类型:英雄头像和框框头像。英雄头像是...
-
问 头像框王者荣耀怎么关闭
提问时间:2024-05-18 23:45:22
答 头像框王者荣耀怎么关闭 王者荣耀是一款非常受欢迎的***,其玩家数量已经超过了5亿。在游戏中,有一种称为“头像框”的功能,它可以让玩家自定义自己的头像,使其更加...
-
问 王者荣耀怎么熬出头像框
提问时间:2024-05-18 09:41:02
答 王者荣耀怎么熬出头像框 熬出头像框需要一定的时间和技巧,下面给大家介绍一些王者荣耀熬出头像框的方法:1.参与活动获取头像框王者荣耀每年都会推出各种活动,比如节日...
-
问 王者荣耀怎么弄的头像框
提问时间:2024-05-18 18:54:20
答 王者荣耀怎么弄的头像框 王者荣耀是一款非常受欢迎的MOBA游戏,它不仅拥有丰富的英雄选择和各种玩法,还有很多有趣的活动和特色功能。其中,头像框就是一项非常受欢迎...
-
问 王者荣耀里怎么弄头像框
提问时间:2024-05-18 06:25:08
答 王者荣耀里怎么弄头像框 王者荣耀是一款广受欢迎的多人在线游戏。在游戏中,你可以使用头像框来显示你的个性和风格。玩家可以通过购买和获得游戏中的头像框来装饰自己的头...