hihocoder 1304 : 搜索一·24点(DFS+回溯)

来源:互联网 发布:无线传感器网络 编辑:程序博客网 时间:2024/06/07 05:02

深搜判断是否存在解。若当前不存在解,需返回之前的状态。

通过2层循环,处理运算顺序不同的情形。

#include "bits/stdc++.h"//hiho98using namespace std;const int CardsNumber = 4;const int ResultValue = 24;double number[CardsNumber];bool PointsGame(int n){if(n == 1){//cout<<number[0]<<endl;if(fabs(number[0]-24.) <1e-3 )return true;elsereturn false;}for(int i = 0; i < n; i++){for(int j = i + 1; j < n; j++){double a = number[i], b = number[j];number[j] = number[n - 1];//压缩卡数number[i] = a + b;if(PointsGame(n - 1))return true;number[i] = a - b;if(PointsGame(n - 1))return true;number[i] = b - a;if(PointsGame(n - 1))return true;number[i] = a * b;if(PointsGame(n - 1))return true;if(b != 0){number[i] = a / b;if(PointsGame(n - 1))return true;}if(a != 0){number[i] = b / a;if(PointsGame(n - 1))return true;}//回朔number[i] = a;number[j] = b;}}return false;}int main(){//65  74  81  75//'A','J','Q','K'// 1   11  12  13int i;int t;scanf("%u",&t);while(t--){for(i=0; i<CardsNumber; ++i){scanf("%lf",&number[i]);            //确实应当用浮点数存储,考虑除法的情况}if(PointsGame(CardsNumber)){cout << "Yes" << endl;}else{cout << "No" << endl;}}return 0;}


0 0
原创粉丝点击