三国杀吧 关注:3,403,269贴子:88,458,494

回复:拼图攻略

只看楼主收藏回复

Time limit exceeded


IP属地:福建34楼2020-07-29 10:07
收起回复
    谢谢楼主了


    IP属地:山东35楼2020-07-29 10:28
    收起回复
      楼主,为什么我就是程序正在运行中?等了半天了


      IP属地:上海36楼2020-07-29 10:29
      收起回复
        21步 感谢大佬


        IP属地:福建37楼2020-07-29 10:39
        回复


          IP属地:上海38楼2020-07-29 10:45
          收起回复
            第二行输出的代码就是0依次和这些位置的数字交换位置吗?就按你的那个图第二行输出的是 4 7 8 5 2 1 怎么会有斜着的


            IP属地:上海39楼2020-07-29 10:53
            收起回复
              lz方法挺不错,不过几乎都是21次


              IP属地:浙江来自Android客户端40楼2020-07-29 10:54
              收起回复
                OIer表示:一个裸的华容道……


                IP属地:北京41楼2020-07-29 10:58
                收起回复
                  17步


                  IP属地:福建42楼2020-07-29 11:33
                  回复
                    你们都看懂了吗?为啥我看不懂


                    IP属地:巴西来自Android客户端43楼2020-07-29 12:03
                    收起回复
                      程序员大佬牛比啊,感受小弟一拜。


                      IP属地:江西44楼2020-07-29 14:09
                      回复
                        #include<bits/stdc++.h>
                        using namespace std;
                        #define b 3
                        #define n2 9
                        const int dx[4]={-1,0,1,0};
                        const int dy[4]={0,-1,0,1};
                        const char dir[4]={'u','l','d','r'};
                        struct puzzle{
                        int f[n2];
                        int space;
                        string path;
                        bool operator < (const puzzle &p)const {
                        for(int i=0;i<n2;i++){
                        if(f[i]==p.f[i]){
                        continue;
                        }
                        return f[i]>p.f[i];
                        }
                        return false;
                        }
                        };
                        bool istarget(puzzle p)
                        {
                        for(int i=0;i<n2;i++){
                        if(p.f[i]!=(i+1)){
                        return false;
                        }
                        }
                        return true;
                        }
                        string bfs(puzzle s)
                        {
                        queue<puzzle>q;
                        map<puzzle,bool>V;
                        puzzle u,v;
                        s.path="";
                        q.push(s);
                        V[s]=true;
                        while(!q.empty()){
                        u=q.front();
                        q.pop();
                        if(istarget(u)){
                        return u.path;
                        }
                        int sx=u.space/b;
                        int sy=u.space%b;
                        for(int r=0;r<4;r++){
                        int tx=sx+dx[r];
                        int ty=sy+dy[r];
                        if(tx<0||ty<0||tx>=b||ty>=b){
                        continue;
                        }
                        v=u;
                        v.space=tx*b+ty;
                        swap(v.f[v.space],v.f[u.space]);
                        if(!V[v]){
                        V[v]=true;
                        v.path+=dir[r];
                        q.push(v);
                        }
                        }
                        }
                        return "unsolvable";
                        }
                        int main()
                        {
                        puzzle in;
                        for(int i=0;i<n2;i++){
                        scanf("%d",&in.f[i]);
                        if(in.f[i]==0){
                        in.f[i]=n2;
                        in.space=i;
                        }
                        }
                        string ans=bfs(in);
                        cout<<ans.size()<<endl;
                        cout<<ans<<endl;
                        return 0;
                        }
                        /*
                        1 3 0
                        4 2 5
                        7 8 6
                        */


                        IP属地:广东45楼2020-07-29 16:38
                        收起回复
                          我也是21步,谢谢楼主,楼主是大学生还是已经工作的程序员呀


                          IP属地:福建46楼2020-07-29 23:21
                          收起回复
                            这是像玩华容道一样吗?还是直接拼?


                            47楼2020-07-30 20:22
                            收起回复
                              谢谢楼主,不过我吐了,我的居然要23步


                              49楼2020-07-31 11:13
                              收起回复