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 つのデータ マイニング アルゴリズム

ブログ    
ブログ    
ブログ    

推薦する

マイクロソフトがML.NETクロスプラットフォーム機械学習フレームワークをオープンソース化し、AIをさらに一歩前進させる

現地時間5月7日、米国シアトルでMicrosoft Buildカンファレンスが開催され、マイクロソフ...

AI「コスプレ」の鍵はキャラクター設定にあり!復旦大学、人民大学などがビッグファイブ性格特性+MBTIテストを発表:特性回復率は82.8%に達し、OOCを否定

好きなアニメ小説のキャラクターとチャットしてみませんか?バーチャルコンパニオンが欲しいですか?あなた...

AIが小売業の顧客体験に革命を起こす

人工知能はすでに多くの業界に大きな影響を与えています。調査会社IDCの調査によると、2019年の人工...

エンタープライズ AI の大きな課題を解決する方法

既存のデータの 90% は過去 2 年間に生成されたものです。 毎日 7.5 京バイトのデータが生成...

全国の大学の人工知能学科の一覧がここにあります!今年の大学入試の受験を検討していますか?

学生たちの運命を決める2018年度大学入試が始まりました。多くの受験生が理想的な結果を得られることを...

Huawei のフルシナリオ AI コンピューティング フレームワーク MindSpore がオープン ソースになりました。

Huawei の Mindspore AI コンピューティング フレームワークの公式オープン ソー...

Google 中国人がタイムクリスタルを使って何十年も昔の謎を解く!永久機関が再び自然界に出現

2021年11月30日、自然界に再び時間結晶が出現しました。タイムクリスタルは不思議な物質です。理論...

AI時代のネイティブ:3歳でパズルを作り、5歳でプログラミングを学ぶ

[[241540]] 2018年世界ロボットコンテストで、子どもたちがロボットのプログラミングと制御...

...

顔認証は必見!顔のなりすまし防止、クロスポーズ認識などを実現する方法を学ぶための 5 つの論文 (リンク付き)

[[281197]] [はじめに] 顔認識はコンピュータビジョンにおける最大の研究分野の一つです。...

...

運輸・物流におけるAIと自動化のユースケース

[[343865]] [51CTO.com速訳]調査によると、コロナウイルスの流行により、多くの国と...

...

マイクロソフトがML.NET 3.0をリリース、ディープラーニング機能を拡張

11月29日、海外メディアの報道によると、マイクロソフトは最近、機械学習モデルを.NETアプリケーシ...