首页 > 其他分享 >hdu-1195

hdu-1195

时间:2023-03-03 13:04:27浏览次数:41  
标签:10 hdu int s1 1195 vis num include

http://acm.hdu.edu.cn/showproblem.php?pid=1195


bfs 加1 减 1 交换 ,三个方式


#include<stdio.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#include<algorithm>
#include<vector>
#include<string.h>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<sstream>
#include<time.h>
#include<utility>
#include<malloc.h>
#include<stdexcept>
#include<iomanip>
#include<iterator>

using namespace std;

int t ;

char a[5],b[5];

struct node
{
    int num[5];
    int step;
};

node s1,s2;

int vis[10][10][10][10];

void bfs ()
{
    memset (vis,0,sizeof(vis));
    queue<node> q ;
    node qq ,qqq;

    s1.step = 0;
    vis[s1.num[0]][s1.num[1]][s1.num[2]][s1.num[3]] = 1;
    q.push(s1);
    while (!q.empty())
    {
        int ok = 1;
        qq = q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            if (qq.num[i] != s2.num[i])
            {
                ok = 0;
                break;
            }
        }

        if (ok)
        {
            printf("%d\n",qq.step);
            return ;
        }

        for(int i=0;i<4;i++)//减1
        {
            qqq = qq;
            if (qq.num[i] == 1)
                qqq.num[i] = 9;
            else
                qqq.num[i] = qq.num[i] - 1;

            qqq.step = qq.step + 1;

            if(!vis[qqq.num[0]][qqq.num[1]][qqq.num[2]][qqq.num[3]])
            {
                vis[qqq.num[0]][qqq.num[1]][qqq.num[2]][qqq.num[3]] = 1 ;
                q.push(qqq);
            }
        }

        for(int i=0;i<4;i++)//+1
        {
            qqq = qq;
            if (qq.num[i] == 9)
                qqq.num[i] = 1;
            else
                qqq.num[i] = qq.num[i] + 1;

            qqq.step = qq.step + 1;
            if(!vis[qqq.num[0]][qqq.num[1]][qqq.num[2]][qqq.num[3]])
            {
                vis[qqq.num[0]][qqq.num[1]][qqq.num[2]][qqq.num[3]] = 1 ;
                q.push(qqq);
            }
        }

        for(int i=0;i<3;i++)//替换
        {
            qqq = qq;
            qqq.num[i] = qq.num[i+1];
            qqq.num[i+1] = qq.num[i];
            qqq.step = qq.step + 1;
            if(!vis[qqq.num[0]][qqq.num[1]][qqq.num[2]][qqq.num[3]])
            {
                vis[qqq.num[0]][qqq.num[1]][qqq.num[2]][qqq.num[3]] = 1 ;
                q.push(qqq);
            }
        }
    }
    return ;
}

int main()
{
	scanf("%d",&t);
	while (t--)
    {
        scanf("%s %s",a,b);

        for(int i=0;i<4;i++)
        {
            s1.num[i] = a[i] - '0';
            s2.num[i] = b[i] - '0';
        }
        bfs ();
    }
	return 0;
}




标签:10,hdu,int,s1,1195,vis,num,include
From: https://blog.51cto.com/u_15990681/6098472

相关文章

  • hdu-1016
    约瑟夫换问题http://acm.hdu.edu.cn/showproblem.php?pid=1016#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<string.h>intn,cas=1,vi......
  • hdu-1238
    http://acm.hdu.edu.cn/showproblem.php?pid=1238SubstringsTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalS......
  • hdu-1515
    dfs 题意:给你两个字符串,问:第一个字符串按入栈出栈规则,能否达到第二个字符串,输出所有的方法,i表示入栈,o表示出栈。用dfs模拟第一个字符串入栈出栈过程:1.当前字符......
  • hdu-1548
    搜索做着做着成最短路径了。。dij本层可以直接到达的层数距离为1否则为无穷大#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#includ......
  • hdu-1253
    http://acm.hdu.edu.cn/showproblem.php?pid=1253这道水题#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#include<......
  • hdu-2821
    http://acm.hdu.edu.cn/showproblem.php?pid=2821不要被题目吓到,认真读题还是好理解的#include<stdio.h>#include<iostream>#include<string.h>#include<math.h......
  • HDU-5112-A Curious Matt (2014ACM/ICPC北京赛区现场赛A题!)
    http://acm.hdu.edu.cn/showproblem.php?pid=5112排序之后计算就好开始用cin超时了#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#......
  • hdu-5122
    http://acm.hdu.edu.cn/showproblem.php?pid=5122简单题#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#include<ctype.h>#include......
  • HDUOJ 2041-2055
    2041超级楼梯ProblemDescription有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input输入数据首先包含一个整数N,表示测试实......
  • Problem C HDU - 5687
    现在有个字典要支持一下操作 1、insert:往神奇字典中插入一个单词  2、delete:在神奇字典中删除所有前缀等于给定字符串的单词  3、search:查询是否在神奇......