社区讨论

《魔术》== “魔”拟

灌水区参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m6gjxn7x
此快照首次捕获于
2025/01/28 22:07
去年
此快照最后确认于
2025/11/04 10:12
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n, ans[25], flag[25], noi[25];
void dfs(int dep)
{
	if(dep > n)
	{
		int pos1, pos2, pos3;
		for(int i = 1; i <= n; i ++)
		{
			cout << ans[i] << " ";
			noi[i] = ans[i];
			if(noi[i] == 1) pos1 = i;
			if(noi[i] == 2) pos2 = i;
			if(noi[i] == 3) pos3 = i;
		}
		cout << "\n";
		cout << "//" << pos1 << " " << pos2 << " " << pos3 << "//\n";
		cout << "->";
		if(pos3 != 1) swap(noi[pos3], noi[pos3 - 1]);
		for(int i = 1; i <= n; i ++)
		{
			if(noi[i] == 1) pos1 = i;
			if(noi[i] == 2) pos2 = i;
			if(noi[i] == 3) pos3 = i;
		}
		if(pos1 != 3) swap(noi[pos1], noi[pos1 + 1]);
		for(int i = 1; i <= n; i ++)
		{
			if(noi[i] == 1) pos1 = i;
			if(noi[i] == 2) pos2 = i;
			if(noi[i] == 3) pos3 = i;
		}
		if(pos2 != 1) swap(noi[pos2], noi[pos2 - 1]);
		for(int i = 1; i <= n; i ++)
			cout << noi[i] << " ";
		cout << "\n";
		return;
	}
	for(int i = 1; i <= n; i ++)
	{
		if(flag[i] == 1) continue;
		ans[dep] = i;
		flag[i] = 1;
		dfs(dep + 1);
		flag[i] = 0;
	}
}

int main()
{
	//杯子是1, 勺子是2, 筷子是3; 
	cin >> n;
	dfs(1);
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...