-3

助けてください!0 と 1 の 6x6 マトリックスをランダムに出力するプログラムを実行する必要があります。最も難しい部分は、プログラムが (0,0) と (5,5) の間の道路を左、右、上、下に移動し、すべての座標を表示する必要があることです。道がない場合、プログラムはそれを言わなければなりません。

例:

1 1 0 0 0 0 
0 1 1 1 1 0 
1 0 1 0 0 0 
0 1 1 1 1 0 
0 0 0 1 0 0 
0 1 0 1 1 1 

(0,0)-(0,1)-(1,1)-(2,1)-(2,2)-(2,3)-(3,3)-(3,4)-(3 ,5)-(4-5)-(5-5)

ここで、cpp を完了する必要があります。

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int  N=6;
// Genere aca su funcion camino
// Genero una matriz aleatoria de 0s y 1s
void randmat(int v[][N])
{
     for(int f=0; f<N; f++)
        for(int c=0; c<N; c++)
          v[f][c] = rand()%0;
}   
// Imprimir la matriz
void imprimir(int v[][N])
{
     for (int f=0;f<N;f++)
     {
         cout<<endl;
         for(int c=0; c>N; c++)
         cout <<v[f][c]<<" ";
     }
     cout<<endl;
}

int main()
{ 
    int semilla = time(NULL);
    srand(semilla);
    int M[N][N];
    randmat(M);//genera la matriz aleatoria
    imprimir(M);
    //llame a su funcion aqui
    cout<<M[N][N]<<endl;
    system("pause");
}

助けてください D:! 私はそれを行う方法を知りません。

pd:すみません、英語でお願いします。

4

1 に答える 1

0

この答えはおそらくあまり役​​に立ちませんが、解決策につながるヒントを得ることができるでしょう。

あなたのマトリックスは、「ノード」であるものがグラフであり、2つの間の直接の隣接関係(セルの北/東/南/西)が「エッジ」を定義します。あなたが求められているのは、(0,0) と (5,5) がそのグラフで接続されているかどうかを伝え、接続されている場合はパスを与えることです。

隣接行列または隣接リストによってグラフを表すのが一般的です。これらの表現のいずれかで行列を解析したら、ダイクストラのアルゴリズムのようないくつかの単純なグラフ検索アルゴリズムの実装を試みることができます。すべてのエッジが同じ重み (エッジがある場合は 1、そうでない場合は 0) を持つため、一部の側面は特に簡単になります。最短パスを見つける必要がない場合は、他の到達可能性アルゴリズムを調べることができます。

最後に、動的計画法を使用して、自分で何かを考え出すことができます。ここでのアイデアは、部分的なソリューションを組み合わせたアルゴリズムを構築することです。たとえば、(5,5) から始まるパスを見つけるように求められた場合、解決策は簡単です。「1」があれば完了です。(5,5) から北/西に開始する必要がある場合は、より単純なサブ問題の以前の解決策に「1」が接続されているかどうかを確認する必要があります。次に、(0,0) で開始できる一般的なソリューションが得られるまで、そのようにソリューションを組み合わせ続ける必要があります。

これらのトピックについてさらに情報が必要な場合はお知らせください。ただし、下調べを依頼しないでください。

幸運を!

于 2014-05-21T23:47:41.520 に答える