USACO 2.3.3 Zero Sum

来源:互联网 发布:ghost网络克隆软件 编辑:程序博客网 时间:2024/06/05 06:18

DFS

重点是路径记录问题

内存允许的情况下可以用数组

还有一个方法三进制枚举路径然后一个一个进行可行性检查


#include <iostream>#include <fstream>#include <string>//#define LOCALusing namespace std;#ifdef LOCALofstream fout ("out.txt");ifstream fin ("in.txt");#elseofstream fout ("zerosum.out");ifstream fin ("zerosum.in");#endifint cengshu;int num_res = 0;int res[10000][10];char c[] = {' ', '+', '-'};void dfs(int ceng, int sum, int path, int last){if(ceng==cengshu){if(sum==0){int temp=path;int i = 0;while(temp){res[num_res][i++] = temp%10;temp /= 10;}num_res++;}return;}    if(ceng>cengshu)        return;    int temp_last;    if(last>=0)    temp_last = last*10+ceng+1;    else    temp_last = last*10-ceng-1;    dfs(ceng+1, sum-last+temp_last, path*10, temp_last);    dfs(ceng+1, sum+ceng+1, path*10+1, ceng+1);    dfs(ceng+1, sum-ceng-1, path*10+2, -ceng-1);return;}int main() {fin>>cengshu;dfs(1, 1, 0, 1);for (int i = 0; i < num_res; ++i){for (int j = 1; j < cengshu ; ++j){int temp = cengshu-1-j;fout<<j<<c[res[i][temp]];}fout<<cengshu<<endl;}    return 0;}
发现把路径用字符串放在函数参数里边会更方便,可行后直接输出即可

0 0
原创粉丝点击