5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

巨大数探索スレッド10

440 :132人目の素数さん:2015/02/20(金) 23:31:11.50 ID:1qtXGDP7
ヒドラゲームをできるだけ素直に実装してみた。

#include<iostream>
#include<list>
using namespace std;
int a = 0;
struct Node{ list<Node *> child; Node *parent;};
Node *leaf(Node *n){if (n->child.empty())return n;return leaf(n->child.back());}
Node *copy(Node *n){Node *x = new Node();
for (list<Node *>::iterator p = n->child.begin();p != n->child.end();++p){
Node *c = copy(*p);c->parent = x;x->child.push_back(c);}return x;}
bool next(Node *n){Node *l = leaf(n);if (l == n)return false;
Node *p = l->parent;p->child.pop_back();a++;if (p == n) return true;
Node *pp = p->parent;for (int i = 0; i<a; i++){
Node *c = copy(p);c->parent = pp;pp->child.push_back(c);}return true;}
void dump(Node *n){cout << "(";
for (list<Node *>::iterator p = n->child.begin();p != n->child.end();++p)dump(*p);
cout << ")";}
void init_node(Node *n, int i){if (i == 0)return;Node *c = new Node();
init_node(c, i - 1);c->parent = n;n->child.push_back(c);}
int _tmain(int argc, _TCHAR* argv[]){Node root;init_node(&root, 3);dump(&root);cout << endl;
while (next(&root)){dump(&root);cout << endl;}
cout << a << endl;return 0;}

347 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)