zoukankan      html  css  js  c++  java
  • 蓝桥-青蛙跳杯子(bfs)

    问题描述

      X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。
      X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。
      如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。


      *WWWBBB


      其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。


      X星的青蛙很有些癖好,它们只做3个动作之一:
      1. 跳到相邻的空杯子里。
      2. 隔着1只其它的青蛙(随便什么颜色)跳到空杯子里。
      3. 隔着2只其它的青蛙(随便什么颜色)跳到空杯子里。


      对于上图的局面,只要1步,就可跳成下图局面:


      WWW*BBB


      本题的任务就是已知初始局面,询问至少需要几步,才能跳成另一个目标局面。


      输入为2行,2个串,表示初始局面和目标局面。
      输出要求为一个整数,表示至少需要多少步的青蛙跳。

    样例输入

    *WWBB
    WWBB*

    样例输出

    2

    样例输入

    WWW*BBB
    BBB*WWW

    样例输出

    10

    数据规模和约定

      我们约定,输入的串的长度不超过15


      资源约定:
      峰值内存消耗(含虚拟机) < 256M
      CPU消耗 < 1000ms




      请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。


      所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
      不要使用package语句。不要使用jdk1.7及以上版本的特性。
      主类的名字必须是:Main,否则按无效代码处理。


      ----------------------------


      笨笨有话说:
      我梦见自己是一棵大树,
      青蛙跳跃,
      我就发出新的枝条,
      春风拂动那第 5 层的新枝,
      哦,我已是枝繁叶茂。

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<map>
    #include<set>
    #include<vector>
    #include<cmath>
    
    const int maxn=1e5+5;
    typedef long long ll;
    using namespace std;
    string stand,s1;
    int len;
    struct node
    {
    	string str;
    	int step;
    	node(string str1,int ss){
    		str=str1;
    		step=ss;
    	}
    };
    map<string,int>mp; 
    void bfs()
    {
       queue<node>q;
       q.push(node(s1,0));
    	while(!q.empty())
    	{
    		node now=q.front();
    		q.pop();
    		if(now.str==stand)
    		{
    			cout<<now.step<<endl;
    		}
    	    for(int t=0;t<len;t++)
    	    {
    	    	if(now.str[t]=='*')
    	    	{
    	    		
    	    		for(int j=max(0,t-3);j<=min(len-1,t+3);j++)
    	    		{
    	    			string ss;
    	    			ss=now.str;
    	    			if(ss[j]!='*')
    	    			{
    	    				swap(ss[t],ss[j]);
    	    				if(mp[ss]==0)
    					    {
    						mp[ss]=1;
    						q.push(node(ss,now.step+1));
    					    }
    					}
    					
    					
    				}
    			}
    		}
    	}
    }
    int main()
    {
    	cin>>s1>>stand;
    	len=s1.length();
    	bfs();
    	return 0;
    } 
  • 相关阅读:
    C++矢量图形库系列(转)
    ArcGIS Server 地图发布请求分析
    Git在提交代码时出现的fatal: Authentication failed的问题
    创建WPF项目
    Linux查看日志常用命令(转载)
    CentOS6 + MapServer7.4编译
    升级GCC
    QT+OpenGL(03)--libpng库的编译
    QT+OpenGL(02)-- zlib库的编译
    QT+OpenGL(01)--实现三角形渲染
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781770.html
Copyright © 2011-2022 走看看