三国杀吧 关注:3,403,266贴子:88,448,931
先开一贴 楼主去吃饭 人多回来就更


IP属地:湖南1楼2020-07-28 17:47回复
    gkd


    IP属地:福建来自Android客户端3楼2020-07-28 18:08
    回复
      来了来了


      IP属地:湖南4楼2020-07-28 18:20
      收起回复


        IP属地:四川来自Android客户端6楼2020-07-28 18:21
        收起回复
          首先要说明一下 每个人的图是不一定相同的 所以想要冲榜最好的计划是先攒次数 然后洗初始图 直到某一次要用的最少步数不多 这个时候就可以考虑考虑下手了


          IP属地:湖南7楼2020-07-28 18:21
          收起回复

            比如楼主的这一张 按照上面的标号就是
            3 5 1
            0 7 2
            4 6 8


            IP属地:湖南9楼2020-07-28 18:24
            收起回复
              然后打开这个网页https://c.runoob.com/compile/11
              在线工具那一栏选C在线工具
              下面两大块中 删掉左边一块中的文字
              粘贴上一段代码(楼下会贴)
              然后在“点击运行”的右边按照上面所标的序列输入(比如楼主的图就输入3 5 1 0 7 2 4 6 8 注意数字与数字之间要有空格)
              最后点击“点击运行” 右边会弹出两行 第一行是最小步数
              第二行是空白块每一次移动至何处(也就是移动的方式)


              IP属地:湖南10楼2020-07-28 18:27
              收起回复
                #include<stdio.h>
                #include<stdlib.h>
                int i,j,a[10][10],x,y,step=0,dx[4]={-1,0,1,0},dy[4]={0,-1,0,1},min=50,b[100],c[100];
                int check()
                {
                int i,j;
                for(i=1;i<=3;i++)for(j=1;j<=3;j++)if(i==3&&j==3)return 1;else if(a[i][j]!=3*i+j-3)return 0;
                }
                void dfs(int x,int y)
                {
                int ii,xx,yy;
                if(step>=min)return;
                if(check()==1){min=step;for(ii=0;ii<=step;ii++)c[ii]=b[ii];return;}
                for(ii=0;ii<4;ii++)
                {
                xx=x+dx[ii];yy=y+dy[ii];
                if(xx>=1&&xx<=3&&yy<=3&&yy>=1&&((step==0)||(3*xx+yy-3!=b[step-1])))
                {
                a[x][y]=a[xx][yy];
                a[xx][yy]=0;
                step++;b[step]=3*xx+yy-3;
                dfs(xx,yy);
                step--;
                a[xx][yy]=a[x][y];
                a[x][y]=0;
                }
                }
                }
                int main(){
                for(i=1;i<=3;i++)for(j=1;j<=3;j++)scanf("%d",&a[i][j]);
                for(i=1;i<=3;i++)for(j=1;j<=3;j++)if(a[i][j]==0){x=i;y=j;}
                b[0]=3*x+y-3;dfs(x,y);
                printf("%d\n",min);
                for(i=0;i<=min;i++)printf("%d ",c[i]);
                return 0;
                }


                IP属地:湖南11楼2020-07-28 18:28
                收起回复
                  好啦更完了如果遇到什么问题欢迎在楼里留言 楼主会回答的


                  IP属地:湖南12楼2020-07-28 18:29
                  收起回复
                    顶顶 没人么


                    IP属地:湖南13楼2020-07-28 18:37
                    收起回复
                      感谢楼主,正在试着拼图


                      IP属地:浙江14楼2020-07-28 18:40
                      收起回复
                        1


                        IP属地:广东来自Android客户端15楼2020-07-28 18:42
                        回复
                          换了几次没找到步数特别低的


                          IP属地:福建来自Android客户端16楼2020-07-28 19:01
                          收起回复


                            IP属地:重庆来自Android客户端17楼2020-07-28 19:03
                            回复