您的位置:首页 > 编程语言 > C语言/C++

USACO Zero Sum

2012-07-28 02:23 155 查看
没什么好说的,DFS,注意判断函数 eval()
/*
ID: wangxin12
PROG: zerosum
LANG: C++
*/
#include <iostream>
#include <vector>
#include <fstream>
#include <string>

using namespace std;

int N;
ifstream fin("zerosum.in");
ofstream fout("zerosum.out");
string model = "1 2 3 4 5 6 7 8 9";
string opt = " +-";

bool eval() {
int sum = 0, curNum = 0;
int operater = 1;
int i = 0;
while(i <= 2 * N - 2) {
switch(model[i]) {
case ' ':
break;
case '+':
sum += operater * curNum;
curNum = 0;
operater = 1;
break;
case '-':
sum += operater * curNum;
curNum = 0;
operater = -1;
break;
default:
curNum = curNum * 10 + model[i] - '0'; break;
}
i++;
}
sum += operater * curNum;

if(sum == 0) return true;
else return false;

}

void DFS(int level) {
if(level > N - 1) {
if(eval()) {
for(int j = 0; j <= 2 * N - 2; j++) {
char c = model[j];
fout<<c;
}
fout<<endl;
}
return;
}

for(int i = 0; i < opt.size(); i++) {
model[2 * level - 1] = opt[i];
DFS(level + 1);
}
}

int main() {
fin>>N;
DFS(1);
fin.close();
fout.close();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string c++ c