魔方陣パズル(2) - C言語

 質問の魔方陣をプログラムで解いてみました。(^_^;
 解の数が多いので、リダイレクト「>」で、出力先をファイルにしました。

●MagicCircle.c

/*
 * MagicCircle.c
 *       p      
 *      [0]     
 *
 *   [1][2][3]  
 *    [4] [5]   
 * [6]  [7]  [8]
 *
 */
 
#include <stdio.h>
#include <time.h>
// 参考URLの順列生成プログラムの main を #if 0 〜 #endif で無効化して_genperm.c に改名したソース
#include "_genperm.c"

void disp(int c, int *p)	// 表示
{
	printf("[%3d]\n",c);		
	printf("     %3d      \n",p[0]);
	printf("\n");
	printf("  %3d%3d%3d   \n",p[1],p[2],p[3]);
	printf("   %3d%3d     \n",p[4],p[5]);
	printf("%3d  %3d  %3d \n",p[6],p[7],p[8]);
	printf("\n");
}

int main(void)
{
	int p[]={ 1, 2, 3, 4, 5, 6, 7, 8, 9};	// 順列生成用
	int cnt=0;
	clock_t tm;
	
	tm=clock();	// Timer Start
	do{	
		if(p[0]+p[1]+p[4]+p[5]+p[3]!=25) continue;
		if(p[6]+p[1]+p[2]+p[5]+p[7]!=25) continue;
		if(p[8]+p[3]+p[2]+p[4]+p[7]!=25) continue;
 
		// チェックを潜り抜けたものだけを出力
		cnt++;
		disp(cnt,p);
		//break;
	}while (next_perm(p,9,9));
	tm=clock()-tm;	// Timer Stop
	printf("Runtime : %.3f [sec]\n",(double)tm/CLOCKS_PER_SEC);
	return(0);
}

●実行結果

[  1]
       1      

    3  2  6   
     8  7     
  9    4    5 

[  2]
       1      

    3  2  8   
     6  7     
  9    4    5 

…(省略)…

[288]
       9      

    7  8  4   
     2  3     
  1    6    5 

Runtime : 0.031 [sec]

※参考URL
http://d.hatena.ne.jp/rsc96074/20110512/1305199735
よしいずの雑記帳  再帰呼び出しを使わずに順列や組合せを得るC言語プログラム (2)

魔方陣パズル - rscの日記
4次の魔方陣プログラム - C言語 - rscの日記
数的推理の魔方陣の問題をJavaで解いてみた。 - rscの日記
数的推理の魔方陣の問題をPythonで解いてみた。 - rscの日記

●新版 明解C言語 入門編 柴田望洋 (著)

新版 明解C言語 入門編

新版 明解C言語 入門編

●苦しんで覚えるC言語 MMGames (著)

苦しんで覚えるC言語

苦しんで覚えるC言語

●新C言語入門 ビギナー編 (C言語実用マスターシリーズ) 林 晴比古 (著)

新C言語入門 ビギナー編 (C言語実用マスターシリーズ)

新C言語入門 ビギナー編 (C言語実用マスターシリーズ)

●わかりやすいC 入門編  川場 隆 (著)

わかりやすいC入門編

わかりやすいC入門編

●プログラムを作ろう!C言語入門―はじめてでも楽しく学べる!  古金谷 博 (著)

プログラムを作ろう! C言語入門

プログラムを作ろう! C言語入門