2017-04-02 9 views
2

私は10X10のボードを作成しなければなりません。また、5本の船はそれぞれ2,3,3,4,5の長さを持っています。船は互いに重ならないようにする必要があり、それらはグリッド(10x10)内になければならず、垂直または水平のいずれかにする必要があります。戦艦にはどのように船を置くことができますか?

私はこれまで2日間作業してきましたが、私がこれまでにできることは、10x10のボード上に水平に4本、オーバーラップする船の長さを2,3,4,5にしています。

私が執着している部分は以下の通りです: 1)私は船をグリッド内に置いていましたが、重なっています。 2)私は2,3,4,5の長さごとに4本の船を作ることができますが、3回を2回行うことはできません。 3)私は縦置きではなく横置きしかできません。私は船を垂直にするか、水平にするかをランダムにしたい。

だから私が書いたコードは以下の通りです:

{

matrix = zeros(10,10); 
row = randi(size(matrix, 1),1,1); %row number 
col = randi(size(matrix, 2),1,1); %column number 

for i=2:5 
     while col(1,1)+i-1>10 % Checking if it is within grid 
       row = randi(size(matrix, 1),1,1); %row number 
       col = randi(size(matrix, 2),1,1); %column number 
     end 
      matrix(row,col:col+i-1)=i; 
      row = randi(size(matrix, 1),1,1); %row number 
      col = randi(size(matrix, 2),1,1); %column number 


end 
matrix 

}

私はどんな解決策を考え出すことができませんでした。事前に助けていただきありがとうございます。

+0

私の考えは次のとおりです:船がグリッド内にあるかどうかをチェック - >船が重なっているかどうかをチェック - >重複している場合は、新しい列と行を作る - >船がグリッド内にあるかチェック)。私はそれらの文をループに入れる方法を知らなかった – Matmaster

答えて

1

私が誤解されていない場合は、コード自体ではなく、アプローチに問題があります。

各船にフラグ(船舶ID)を使用して、その船舶が占有しているすべてのスポットに10x10のマトリクス(他のすべてのスポットはすべて0である)にそのIDを入力することをおすすめします。船を配置する今

ランダム(yはx座標)スポットを選択する10×10のマトリクスを含まないスポットから。その座標は、私たちが配置しようとしている船の一端を表します。今度は、船は4つの可能な方法(この選択された座標から出発して上/下/左/右の4つの方向)にのみ配置することができます。 4可能な方法の各々について は、(船の長さに応じて)チェックする:

A)船が収まり、10×10のマトリクス

B)と重なっていない船外に出ません占領地

4つの方向のうちの1つ以上が両方とも満たされている場合は、ランダムに1つを選択して船を配置します。さもなければ、ダミーの10x10マトリックスで、この空のスポットを現在の船を置くために使用することができないスポットとしてマークし、他の占有されていないスポット(まだそうである、すなわちダミーマトリックス内に不可能とマークされていない)をランダムに選ぶ。

+0

説明したのと同じアプローチを使用しようとしましたが、条件aとbの両方を満たすコードを書くことができませんでした。私が今の初心者であるからかもしれない。あなたがコードを持っていれば、あなたのコードの一部を私に渡すことはできますか?本当に本当にありがとう! – Matmaster

+0

シンプルなままにしたい場合は、今のところもっとハードコーディングされたアプローチにしてください。フリースポット(x、y)をランダムに選択した後、配置を検索しているwhileループの内側で、x + 3が = 1またはy + 3であるかどうかを確認します。<=10 or y-3> = 1。これらは4つの向きに対応しています。それらのうちの1つが合っている場合(x + 3 <= 10としましょう)、船が置かれていれば(x + 1、y)(x + 2、y)と(x + 3、y)さもなければそこから行かないでください。ここで値 "3"は船の長さを表します。ハードコードする必要はありません。がんばろう! –

+1

ありがとう!あなたへの誇り! – Matmaster

関連する問題