简单回溯。要用到全排列。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int x[10];
bool ok=false;
void dfs(int pos,int res)
{
if(pos==6)
{
if(res==23)
ok=true;
return;
}
else
{
dfs(pos+1,res+x[pos]);
dfs(pos+1,res-x[pos]);
dfs(pos+1,res*x[pos]);
}
}
int main()
{
while(scanf("%d%d%d%d%d",&x[1],&x[2],&x[3],&x[4],&x[5])&&!(!x[1]&&!x[2]&&!x[3]&&!x[4]&&!x[5]))
{
sort(x+1,x+6);
ok=false;
do
{
dfs(2,x[1]);
if(ok) break;
}
while(next_permutation(x+1,x+6));
if(ok) puts("Possible");
else puts("Impossible");
}
return 0;
}
本文介绍如何通过全排列技巧解决简单的回溯问题,包括实现步骤和代码实例。

3539

被折叠的 条评论
为什么被折叠?



