zoukankan      html  css  js  c++  java
  • 算法入门经典-第五章 例题5-2 木块问题

    10
    move 9 onto 1
    move 8 over 1
    move 7 over 1
    move 6 over 1
    pile 8 over 6
    pile 8 over 5
    move 2 over 1
    move 4 over 9
    quit

    #include<cstdio>
    #include<string>
    #include<vector>
    #include<iostream>
    using namespace std;
    const int maxn=30;
    int n;
    vector<int> pile[maxn];//每个pile[i]是一个vector 
    //找到木块所在的pile和height 
    void find_block(int a,int &p,int &h)
    {
    	for(p=0;p<n;p++)
    	{
    		for(h=0;h<pile[p].size();h++)
    		{
    			if(pile[p][h]==a) return;
    		}
    	}
    }
    //把第p堆高度为h的木块上方的所有木块移回原位
    void clear_above(int p,int h)
    {
    	for(int i=h+1;i<pile[p].size();i++)
    	{
    		int b=pile[p][i];
    		pile[b].push_back(b);
    	}
    	pile[p].resize(h+1);//第p堆值保留下标为0-h的元素 
    }
    //把第p堆高度为h及其上方的木块整体移动到p2堆顶部 
    void pile_onto(int p,int h,int p2)
    {
    	for(int i=h;i<pile[p].size();i++)
    	pile[p2].push_back(pile[p][i]);//push_back 把元素压入栈顶 pop把元素弹出 
    	pile[p].resize(h); //把resize(n),n及以上的都丢掉。这道题的归位的意思是放回对应的第i个堆。
    }
    void print()
    {
    	for(int i=0;i<n;i++)
    	{
    		printf("%d:",i);
    		for(int j=0;j<pile[i].size();j++)
    		{
    			printf(" %d",pile[i][j]);
    		}
    		printf("
    ");
    	}
    }
    int main()
    {
    	int a,b;
    	cin>>n;
    	string s1,s2;
    	for(int i=0;i<n;i++)
    	pile[i].push_back(i);
    	while(cin>>s1>>a>>s2>>b)
    	{
    		int pa,pb,ha,hb;
    		find_block(a,pa,ha);
    		find_block(b,pb,hb);
    		if(pa==pb) continue;//如果在同一个堆则忽略
    		if(s2=="onto") clear_above(pb,hb);//如果第二个字符串是onto就清空b上方的木块并归位 
    		if(s1=="move") clear_above(pa,ha);//如果第一个字符串是move就清空a上方的木块并归位 
    		pile_onto(pa,ha,pb);
    	} 
    	print();
    	return 0;
    }
    

      

  • 相关阅读:
    pdf 下载demo
    solr 7.7 搭建和搜索
    java 项目打jar包,用cmd运行,并且编写运行脚本
    excel poi导出demo
    微信小程序支付,带java源码
    ideal中把项目打成war包,并放在tomcat运行,遇见的问题。。。
    ideal中项目resources下txt文件读取不到的问题。
    托管线程池
    线程同步
    使用Fiddler抓取手机上的数据包
  • 原文地址:https://www.cnblogs.com/is-Tina/p/7356242.html
Copyright © 2011-2022 走看看