样例输出2中输出了好几个0
查看原帖
样例输出2中输出了好几个0
1057681
akl123楼主2023/8/15 23:58

如题,输出如下: 0:0 1:1 9 2 4 2:0 0 0 0 0 0 0 0 0 3:3 4: 5:5 8 7 6 6: 7: 8: 9: 还请诸位不吝赐教 下面附上代码:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int> blocks[30];
int d,h,n;

void find(int block)
{
	for(int i=0;i<n;i++)
	{
	    for(int j=0;j<=(blocks[i].size()-1);j++)
	    {
	    	if(block==blocks[i][j])
	    	{
	    		d=i;h=j;return;
			}
		}
	}
}

void clear_above(int a)
{
	find(a);
	for(int i=(blocks[d].size()-1);i>h;i--)
	  blocks[blocks[d][i]].push_back(blocks[d][i]);
	blocks[d].resize(h+1);
}

void move_over(int a,int b)
{
	find(a);
	int da=d,ha=h;
	find(b);
	int db=d,hb=h;

	for(int i=ha;i<blocks[da].size();i++)
	{
		blocks[db].push_back(blocks[da][i]);
	}
	blocks[da].resize(ha);
}

int main()
{
	int a,b;
	cin>>n;
	for(int i=0;i<n;i++)
	 blocks[i].push_back(i);
	while(1)
	{
		string w1,w2;
		cin>>w1;if(w1=="quit") break;
		cin>>a>>w2>>b;
		int d1,d2;
		find(a);
		d1=d;
		find(b);
		d2=d;
		if(d1==d2) continue;      
		if(w1=="move")
		{
			clear_above(a);
			if(w2=="onto")
			 clear_above(b);
			move_over(a,b);
		}
		if(w1=="pile")
		{
			if(w2=="onto")
			 clear_above(b);
			move_over(a,b);
		}
    }
	for(int i=0;i<n;i++)
	{
		cout<<i<<':';
		for(int j=0;j<blocks[i].size();j++)
	      cout<<blocks[i][j]<<' ';
	    cout<<endl;
	}
	return 0;
}
2023/8/15 23:58
加载中...