R语言简单解impa

2022/1/231404 浏览攻略
本人才打到三十来关
计算机小白,在学校学了一年R,便随便写写
以28关为例成果如图
思路大概是在规则下随机选择,然后无数次实验中记录成功的路径
TapTap
TapTap
运行时间和没关复杂程度相关,特别是可以选择的步数组合情况比较多时会跑很久。仅28关就跑了半分钟多,如果是比较复杂的估计就挺危险[嗒啦啦2_累]
从左到右列输入,空-1红1黄2蓝3,需要输入当前值和目标值,输出为矩阵单下标
还有很多不完善的地方,比如没加入两个块儿同时变化的情况。之后除了简化程序,可能还会加入策略。先发出来,有缘做好继续发
欢迎讨论与dl指点
#数据输入与参数设置(初始目标值与行列)
ind<-15
now<-c(1,1,2,1,2,1,-1,1,1,1,1,1,2,2,1,2)
target<-c(3,2,3,1,3,1,-1,2,2,3,2,2,2,3,1,3)
row<-4
column<-4
#创建矩阵
x<-matrix(now,row,column)
x_tar<-matrix(target,row,column)
x_now<-matrix(now,row,column)
#开始循环
while(sum(abs(x_tar-x_now))!=0){
x_now<-matrix(now,row,column)
a<-c()
for(i in1:ind){
#抽取一次途径点
place<-sample(which(x_now>1),1)
a<-c(a,place)
#进行一次操作(途径点和周围四个地点)
x_now[place]<-x_now[place]-1
if(x_now[place]==0){x_now[place]<-1}
if(place>row){if(x_now[place-row]!=-1){
x_now[place-row]<-x_now[place-row]+1
if(x_now[place-row]>3){x_now[place-row]<-3}}}
if(place<=row*(column-1){
if(x_now[place+row]!=-1){
x_now[place+row]<-x_now[place+row]+1
if(x_now[place+row]>3){x_now[place+row]<-3}}}
if(place%%row!=1){if(x_now[place-1]!=-1){x_now[place-1]<-x_now[place-1]+1
if(x_now[place-1]>3){x_now[place-1]<-3}}}
if(place%%row!=0){if(x_now[place+1]!=-1){x_now[place+1]<-x_now[place+1]+1
if(x_now[place+1]>3){x_now[place+1]<-3}}}
if(all(x_now==x_tar)){b<-a;break}
}}
b#查看可行路径
评论7
只看作者
最热
TapTap
写下你的想法...
sanxi
虽然我不懂但是🐮
Jerry
后来多写了一点,可以应对两个一块儿变和单个块蓝黄之间变换的关卡
但是测试到三四十关的时候由于块的数量急剧增多,代码效率显著降低,有的跑快一个小时,有的跑两个小时不好
就这样吧,继续学习,以后有缘再弄
Hu
随机不可取,应当遍历所有可以点的点,另外如果某个局面是之前出现过的,就舍弃
Jerry
增加存储失败策略,策略比对及新策略截断,代码效率不一定增加
火炎焱
只学过CPP,R语言会更有优势吗?
Jerry
方向不同。c是编译语言,靠近底层,r是解释语言,主要应用于数统
云泽笙
为什么打不开[表情_捂脸哭][表情_捂脸哭][表情_捂脸哭]
已经到底了
18
2
7