文章

14

粉丝

80

获赞

0

访问

11.2k

头像
为什么没有输出啊?调试的时候报错program receive signal sigsegv,好像是backtracking里出了问题
我要提问
发布于2024年3月16日 19:42
阅读数 1.2k

#include<bits/stdc++.h>
using namespace std;
bool istrue(int a, int b, int c, int d){
	int ans1=a*b*c*d;
	int ans2=a*b*c+d;
	int ans3=a*b+c*d;
	int ans4=a*b+c+d;
	int ans5=a+b+c+d;
	if(ans1==24||ans2==24||ans3==24||ans4==24||ans5==24) return true;
	else return false;
}

bool flag=false;
vector<int> path;//收集每一种排列 
vector<int> visited(4,0);//visited[i]==0表示nums[i]没被选入path 

void backtracking(vector<int>& nums){
	if(path.size()==4){
		if(istrue(path[0],path[1],path[2],path[3])) flag=true;//一旦找到一种组合能得出24点,就令flag=true
		return;
	}
	for(int i=0;i<4;i++){
		if(visited[i]==0){
		  path.push_back(nums[i]);
		  visited[i]=1;
	  }
		backtracking(nums);
		path.pop_back();
		visited[i]=0;
  }
  return;
}

int main(){
	vector<int> nums(4,0);
	cin>>nums[0]>>nums[1]>>nums[2]>>nums[3];
	backtracking(nums);
	if(flag) cout<<"YES";
	else cout<<"NO";
	return 0;
}

 

登录查看完整内容


登录后发布评论

1 条评论
snake VIP
2024年3月16日 20:09

括号的位置错了导致你这个递归无法终止

把括号括在下面就可以了

赞(0)