/*

nクイーン問題を考える。プログラムの引数により整数nと位置番号aを与える。
aを関数id2placeによりマス目位置(i,j)に直し、そのマス目にクイーンをおいた場合に、
クイーンがおけなくなる一番号を求めるnoqueenを作成せよ。
noqueenの第1引数にはn、第2,3引数にiとj、第4引数には大きさn+1以上の整数型の配列nqを与える
(ここではn<=15とし、nq[20]としておく)。配列nqの第i要素には、クイーンがおける場合は0、
おけない場合は1を設定する。つまりnoqueenの出力を配列nqに埋め込む形になる。

実行結果の例

> program 6 23
2 5 9 11 16 17 18 19 20 21 22 23 24 28 29 30 33 35

*/

#include<stdio.h>
#include<stdlib.h>

int place2id(int, int, int);
void id2place(int,int,int *,int *);
void noqueen(int,int,int,int []);

main(int argc, char **argv){

  int n = atoi(argv[1]);
  int a = atoi(argv[2]);
  int nq[400];
  int i,j,k;

  for(k=0; k<400; k++) nq[k]=0;
  id2place(n,a,&i,&j);
  noqueen(n,i,j,nq);
  for(k=0;k<=400;k++) if (nq[k]==1) printf(" %d",k);
  printf("\n");
}

void noqueen(int n,int oi, int oj, int nq[]){

/*ここを埋めてもらいたい*/

}

int place2id(int n, int i, int j){

  return n*i-(n-j);
}

void id2place(int n, int a, int *i, int *j){

  int k=a%n;

  if(k!=0){
    *i=a/n+1;
    *j=a%n;
  }
  else{
    *i=a/n;
    *j=n;
  }
}