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

ブログ    
ブログ    
ブログ    

推薦する

AR/AIバーチャル試着室は社会的距離の確保対策への対応

COVID-19 は小売業界に大きな混乱をもたらしましたが、新しいテクノロジーはこれまで以上に重要な...

...

ディープラーニング入門 - TensorFlow を使ってモデルをトレーニングする方法を教えます

[[206688]]導入Tensorflow はバージョン 1.0 へのアップデート後に多くの新機能...

高校生のアルゴリズム「y-cruncher」が円周率の精度の世界記録を更新した

最近、スイスのグラウビュンデン応用科学大学のチームが、円周率の62.8兆桁の計算を101日と9時間で...

AI導入時に解決すべき無線ネットワークの運用・保守における4つの大きな課題

無線通信ネットワークの発展に伴い、今後のネットワークは周波数帯域やネットワーク構成の面でより複雑化し...

エッジAIの夢と課題

この記事では、AI を「小型マシン」に実装する根拠と、AI 小型マシンの開発で直面する課題という 2...

Huawei Cloud Tianchou AI Solverが世界人工知能会議で最高賞を受賞

7月6日、 2023年世界人工知能会議(WAIC 2023)が上海で開幕し、同会議の最高賞である「優...

MITの中国人博士課程学生がChatGPTをJupyterに移行し、自然言語プログラミングをワンストップソリューションに

自然言語プログラミングは Jupyter で直接実行できます。 MIT の中国人博士課程の学生によっ...

フェイフェイ・リー氏のチームは、一人暮らしの高齢者のCOVID-19症状を監視する家庭用AIシステムを開発

[[321322]]フェイフェイ・リーCOVID-19パンデミックにより、高齢者の介護はさらに困難に...

人工ニューラルネットワークとBPアルゴリズムについての簡単な説明

[[338555]] 【51CTO.comオリジナル記事】 1 はじめに現在、機械学習技術とも呼ばれ...

...

ジャック・マーの野望がついに暴露される!たった今、アリの無人ホテルがオープンしました!ウェイターもレジ係もいない…また混乱

[[248958]]今週末、インターネットは再び混乱に陥った。ジャック・マーが2年かけて準備してきた...

緑の希望を守るため、人工知能が森林火災防止ネットワークを構築

ご存知のとおり、森林火災は世界の8大自然災害の一つであり、森林の安全に対する脅威です。平均すると、世...

AI、機械学習、ディープラーニングのつながりと違いを1つの記事で理解する

急速に変化する今日のテクノロジーの世界では、人工知能 (AI)、機械学習 (ML)、ディープラーニン...

顔認識技術の倫理

顔認識技術がさまざまな分野で持つ大きな可能性は、ほとんど想像できないほどです。ただし、使用する前に、...