fork(2) download
  1. /*
  2.  
  3. nクイーン問題を考える。プログラムの引数により整数nと位置番号aを与える。
  4. aを関数id2placeによりマス目位置(i,j)に直し、そのマス目にクイーンをおいた場合に、
  5. クイーンがおけなくなる一番号を求めるnoqueenを作成せよ。
  6. noqueenの第1引数にはn、第2,3引数にiとj、第4引数には大きさn+1以上の整数型の配列nqを与える
  7. (ここではn<=15とし、nq[20]としておく)。配列nqの第i要素には、クイーンがおける場合は0、
  8. おけない場合は1を設定する。つまりnoqueenの出力を配列nqに埋め込む形になる。
  9.  
  10. 実行結果の例
  11.  
  12. > program 6 23
  13. 2 5 9 11 16 17 18 19 20 21 22 23 24 28 29 30 33 35
  14.  
  15. */
  16.  
  17. #include<stdio.h>
  18. #include<stdlib.h>
  19.  
  20. int place2id(int, int, int);
  21. void id2place(int,int,int *,int *);
  22. void noqueen(int,int,int,int []);
  23.  
  24. main(int argc, char **argv){
  25.  
  26. int n = atoi(argv[1]);
  27. int a = atoi(argv[2]);
  28. int nq[400];
  29. int i,j,k;
  30.  
  31. for(k=0; k<400; k++) nq[k]=0;
  32. id2place(n,a,&i,&j);
  33. noqueen(n,i,j,nq);
  34. for(k=0;k<=400;k++) if (nq[k]==1) printf(" %d",k);
  35. printf("\n");
  36. }
  37.  
  38. void noqueen(int n,int oi, int oj, int nq[]){
  39.  
  40. /*ここを埋めてもらいたい*/
  41.  
  42. }
  43.  
  44. int place2id(int n, int i, int j){
  45.  
  46. return n*i-(n-j);
  47. }
  48.  
  49. void id2place(int n, int a, int *i, int *j){
  50.  
  51. int k=a%n;
  52.  
  53. if(k!=0){
  54. *i=a/n+1;
  55. *j=a%n;
  56. }
  57. else{
  58. *i=a/n;
  59. *j=n;
  60. }
  61. }
Runtime error #stdin #stdout 0.02s 2676KB
stdin
Standard input is empty
stdout
Standard output is empty