/* 簡単なプログラムをウプしよう */at GAMEDEV /* 簡単なプログラムをウプしよう */ - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト108:名前は開発中のものです。 02/07/13 12:20 処理の流れやアルゴリズムの簡単な説明くらい 書いてホスィね。作ろうとしているものがイマイチ分からんです。 もしくは、一部だけじゃなくて全部を上げるとか。もちろん動く形でね。 109:名前は開発中のものです。 02/07/13 20:17 再帰させないアルゴリズムってどうするの? 110:名前は開発中のものです。 02/07/13 20:40 >>109 スタックとwhileでどうよ? 111:>>109 02/07/13 22:57 #include <list> struct group { int _num, *num, color; group(int c) { num = &_num; color = c; } void link(group *g) { if (g != this) { int n = *num; num = g->num; *num += n; } } } *block_g[6][6]; int block[6][6] = { {1, 1, 1, 4, 4, 0}, {1, 0, 1, 0, 4, 4}, {1, 1, 1, 2, 2, 4}, {0, 3, 3, 0, 2, 2}, {3, 3, 1, 2, 2, 4}, {3, 1, 1, 1, 0, 4} }; void erace() { std::list<group*> glist; for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) { if (j > 0 && block_g[i][j-1]->color == block[i][j]) (*(block_g[i][j] = block_g[i][j-1])->num)++; if (i > 0 && block_g[i-1][j]->color == block[i][j]) { if (block_g[i][j]) block_g[i][j]->link(block_g[i-1][j]); else (*(block_g[i][j] = block_g[i-1][j])->num)++; } if (!block_g[i][j]) { (*(block_g[i][j] = new group(block[i][j]))->num)++; glist.push_back(block_g[i][j]); } } for (std::list<group*>::iterator i = glist.begin(); i != glist.end(); ++i) delete *i; } int main() { memset(block_g, 0, sizeof(block_g)); erace(); for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) printf("%02d,", *block_g[i][j]->num); printf("\n"); } } 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch