8 クイーン問題を解く C# アルゴリズムの簡単な分析

8 クイーン問題を解く C# アルゴリズムの簡単な分析

8つのクイーンの問題の説明:

8 クイーン問題は古くからある有名な問題であり、バックトラッキング アルゴリズムの典型的な例です。この問題は、19 世紀の有名な数学者ガウスによって 1850 年に提唱されました。8X8 のチェス盤に 8 つのクイーンを配置するときに、クイーン同士が攻撃し合わないように、つまり、同じ行、列、または対角線上に 2 つのクイーンがないようにするには、何通りの方法があるでしょうか。

C# アルゴリズムによるソリューション:

  1. 公共 クラスクイーン
  2. {
  3.   パブリッククイーン()
  4. {
  5.     //  
  6.     // TODO: ここにコンストラクタロジックを追加します 
  7.     //  
  8. }
  9.   プライベート 静的  bool [] 列フラグ = new  ブール[8]{,
  10.   true true true true true true true }; //列占有マーク true は使用可能であることを意味する 
  11.   プライベート 静的  bool [] 左フラグ =新規 ブール[15]{,,,
  12.   true true true true true true true true true true true true }; // 左列の対角占有マーク 
  13.   プライベート 静的  bool [] 右フラグ = new  ブール[15]{,,
  14.   true true true true true true true true true true true true true }; //右斜め占有マーク 
  15.   プライベート 静的  int [,] 位置 =新しい 整数[,]{{0,0,0,0,0,0,0,0,0},
  16. {0,0,0,0,0,0,0,0,0},
  17. {0,0,0,0,0,0,0,0,0},
  18. {0,0,0,0,0,0,0,0,0},
  19. {0,0,0,0,0,0,0,0,0},
  20. {0,0,0,0,0,0,0,0,0},
  21. {0,0,0,0,0,0,0,0,0},
  22. {0,0,0,0,0,0,0,0,0}
  23. }; //クイーンの位置座標 
  24.   プライベート 静的 整数合計=0;
  25.     
  26.   公共 静的  void TryStep( int i) //iの範囲は1から8  
  27. {
  28.     ( int j=1;j<=8;j++)の場合
  29. {
  30.      if (columflag[j-1]&&leftflag[i+j-2]&&rightflag[i-j+7]) //現在の位置を 
  31. {
  32. 列フラグ[j-1] = false ;
  33. 左フラグ[i+j-2] = false ;
  34. rightflag[i-j+7]= false ; //占有 
  35.  
  36. position[i-1,j-1]=1; //クイーンの位置を追加 
  37.      もし(i<8)
  38. {
  39. TryStep(i+1); //次の行を入力する 
  40. }
  41.      それ以外 
  42. {
  43. sum++; //ソリューション統計 
  44. Console.WriteLine( "" );
  45. Console.WriteLine( "{0} 番目のソリューション:" ,sum);
  46. Console.WriteLine( "" );
  47.  
  48.        for ( int m=0;m<8;m++) // 解答を印刷 
  49. {
  50.         ( int n=0;n<8;n++)の場合
  51. {
  52. Console.Write( "{0} " 、位置[m,n]);
  53. }
  54. Console.Write( "\n" );
  55.         
  56. }
  57.  
  58. }
  59.  
  60. columflag[j-1] = true ; // 配置できない場合は、席をキャンセルしてクイーンを削除します 
  61. 左フラグ[i+j-2] = true ;
  62. 右フラグ[i-j+7] = true ;
  63. 位置[i-1,j-1]=0;
  64.        
  65. }
  66.  
  67. }
  68. }
  69. }

これで、8 クイーン問題を解決するための C# アルゴリズムの紹介は終わりです。この例によって、C# アルゴリズムについて理解を深めていただければ幸いです。

<<:  C# アルゴリズムの選択ソートの簡単な分析

>>:  SQL Server 2008 の 9 つのデータ マイニング アルゴリズム

ブログ    

推薦する

人工知能の発展のいくつかの段階

人工知能は、最初はそれほど優れていませんでした。いくつかの段階を経てきました。 [[425861]]...

...

門戸を開くと、エンタープライズ機械学習が急成長

[[394391]]自動運転から機械翻訳、不正取引の特定から音声認識、衛星画像認識からビデオストリー...

岐路に立つ交通:自動運転の未来はどうなるのか?

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

PyTorch Lightning モデルを本番環境にデプロイするにはどうすればいいですか?

[51CTO.com クイック翻訳] 機械学習の分野を見ると、ソフトウェアエンジニアリングの原理を...

近年の機械学習の奇妙な状況

翻訳者注:人工知能分野の発展は学者の貢献と切り離せないものです。しかし、研究が進むにつれて、「クリッ...

AI を使って体内最大の臓器を管理すれば、本当にもっと美しくなれるのでしょうか?

皮膚は人体の中で最も大きな器官であるため、写真を撮るときには必ず皮膚の再生というプロセスを経る必要が...

「AI+医療」の強力な発展の勢いが医療革命を引き起こしている

「AI+ヘルスケア」は現在最も注目されている人工知能の応用シナリオの1つであり、人工知能技術は医療・...

...

エンタープライズ AI の 4 つのトレンド: 現在地と今後の方向性

[[275946]]ビッグデータダイジェスト制作出典: フォーブス編纂者:張大毓人工知能は従来の産業...

2024年のITトレンド、予測、推奨事項

2024 年は、人工知能 (AI) を先頭に、革新的なテクノロジーにとってエキサイティングな年となる...

...

...