• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:N-Queen 問題)

N-Queen問題の解法とは?

このQ&Aのポイント
  • N-Queen問題を解くためのアルゴリズムを教えてください。
  • N-Queen問題は、どのように解けるのでしょうか?
  • N-Queen問題について、解法やプログラムのアドバイスをいただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • s2t
  • ベストアンサー率79% (47/59)
回答No.1

こんな感じで。 MinGWで確認しました。 #include <stdio.h> #include <stdlib.h> #define N 8 /* 8×8の場合 */ int v[N], x[2*N-1], y[2*N-1], z[N]; void printbits(void) { int i, j; static sol = 0; printf("\nAns. %d\n", ++sol); for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { if(z[i] == j) printf("■"); else printf("□"); } printf("\n"); } } void recursivesums(int i) { int j; for(j = 0; j < N; j++) { if(v[j] && x[i+j] && y[i-j+N-1]) { z[i] = j; if(i < N-1) { v[j] = x[i+j] = y[i-j+N-1] = 0; recursivesums(i+1); v[j] = x[i+j] = y[i-j+N-1] = 1; } else printbits(); } } } int main(int argc, char *argv[]) { memset(v, 1, sizeof(v)); memset(x, 1, sizeof(x)); memset(y, 1, sizeof(y)); recursivesums(0); return 0; }

maroniichann
質問者

お礼

ありがとうございます!

関連するQ&A