(vector)堆积木

题目:

n块积木,编号1到n,初始时,第i块放在第i个位置。现在,进行a b操作,每次操作把b位置积木全放到a位置上。输出操作完之后每个位置上的木块。
输入:n,m。n代表有n个积木,m代表有m个操作,接下来m行是m个操作。如果ab相等则本次不移动木块。
输出,每个位置从下到上积木编号,如果该位置没有积木,输出空行
样例输入:
2 2
1 2
1 2
样例输出:
1 2

样例输入:
4 4
3 1
4 3
2 4
2 2
样例输出:

2 4 3 1

分析与解答:

开二维数组回爆内存,所以用动态数组vector。
每次转移之后要清掉被转移的vector的内存。
具体就是先初始化,然后根据操作转移,清空内存,最后输出即可。

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

int main(){
	int n,m;
	cin>>n>>m;
	vector<int> c[10011];
	for(int i=1;i<=n;++i){
		c[i].push_back(i);
	}
	for(int i=1;i<=m;++i){
		int a,b;cin>>a>>b;
		if(a==b) continue;
		else{
			for(int j=0;j<c[b].size();++j){
				c[a].push_back(c[b][j]);
			}
			vector<int>().swap(c[b]); 
		} 
	}
	for(int i=1;i<=n;++i){
		for(int j=0;j<c[i].size();++j){
			if(j!=c[i].size()-1) cout<<c[i][j]<<' ';
			else cout<<c[i][j];
		}
		cout<<endl;
	}
}
发布了218 篇原创文章 · 获赞 131 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_40828914/article/details/89046930