The Fourth Dimension Space

枯叶北风寒,忽然年以残,念往昔,语默心酸。二十光阴无一物,韶光贱,寐难安; 不畏形影单,道途阻且慢,哪曲折,如渡飞湍。斩浪劈波酬壮志,同把酒,共言欢! -如梦令

POJ 3087-Shuffle'm Up(洗牌游戏) 模拟题

题目大意就洗两副牌,重复不停地洗,直到出现给定的顺序为止 输出洗牌步数即可,简单模拟一下洗牌和分牌的动作 这道题就不难了
呵呵 AC这道题只用了20分钟;
不过我有点弄不明白的是网上都说这个题是BFS?我怎么感觉一点也不像啊???
#include <iostream>
#include
<algorithm>
#include
<cmath>
#include 
<cstring>
using namespace std;

char origin1[200];
char origin2[200];
char mix[1000];
char des[1000];
int c;

void shuffle(char a[],char b[])
{
    
int i=0;
    
int j=0;
    
int pos=0;
    
int flag=1;

    
while(pos<=2*c-1)
    
{
        
if(flag==1)
        
{

            mix[pos]
=b[i];
            j
++;
            pos
++;
            flag
=2;
        }

        
else if(flag==2)
        
{
            mix[pos]
=a[i];
            i
++;
            pos
++;
            flag
=1;
        }

        mix[pos]
='\0';


    }

}


void separate()
{
    
int i;
    
for(i=0;i<c;i++)
        origin1[i]
=mix[i];
    
for(i=c;i<2*c;i++)
        origin2[i
-c]=mix[i];
    origin1[c]
='\0';
    origin2[c]
='\0';
}



int main ()
{
    
int step;
    
int testcase;
    
int i;
    
char test1[200];
    
char test2[200];
    
int flag;
    scanf(
"%d",&testcase);
    
for(i=1;i<=testcase;i++)
    
{
        flag
=0;
        step
=0;
        scanf(
"%d",&c);
        scanf(
"%s",origin1);
        scanf(
"%s",origin2);
        scanf(
"%s",des);
        strcpy(test1,origin1);
        strcpy(test2,origin2);
        
while(1)
        
{
            shuffle(origin1,origin2);
            step
++;
            
if(strcmp(mix,des)==0)
                
break;

            separate();
            
if(strcmp(test1,origin1)==0&&strcmp(test2,origin2)==0)
            
{
                flag
=1;
                
break;
            }


        }

        
if(flag==0)
            printf(
"%d %d\n",i,step);
        
else
            printf(
"%d -1\n",i);
    }

    system(
"pause");
    
return 0;
}

posted on 2009-02-28 20:06 abilitytao 阅读(1375) 评论(5)  编辑 收藏 引用

评论

# re: POJ 3087-Shuffle'm Up(洗牌游戏) 模拟题 2009-03-19 10:41 july

if(strcmp(test1,origin1)==0&&strcmp(test2,origin2)==0)
我不知道为什么可以只判断跟最初的状态相同就可以?~~~
就是不会跟中间的相同然后不断循环吗?  回复  更多评论   

# re: POJ 3087-Shuffle'm Up(洗牌游戏) 模拟题[未登录] 2009-03-20 00:31 abilitytao

@july
恩 是的:-)
  回复  更多评论   

# re: POJ 3087-Shuffle'm Up(洗牌游戏) 模拟题 2009-03-20 12:07 july

@abilitytao
想不同为什么啊................  回复  更多评论   

# re: POJ 3087-Shuffle'm Up(洗牌游戏) 模拟题 2009-03-21 17:38 abilitytao

@july
这个。。。我也没办法证明 不过我感觉上貌似是这样 你可以研究一下呵  回复  更多评论   

# re: POJ 3087-Shuffle'm Up(洗牌游戏) 模拟题 2011-06-12 21:57 enli

若和初始状态相同了 不就出现了你说的循环状态吗?  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理