-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

这个答案可能对你没有多大帮助,但也许你从中得到一些帮助你找到解决方案的地方。

您的矩阵是一个,其中一个是“节点”,两个节点之间的直接相邻关系(单元格的北/东/南/西)定义了一个“边”。您需要判断 (0,0) 和 (5,5) 在该图中是否连接,如果连接则给出路径。

用邻接矩阵邻接表来表示图是很常见的。一旦你用这些表示之一解析了矩阵,你可以尝试实现一些简单的图形搜索算法,比如Dijkstra 的算法。某些方面变得特别容易,因为所有边都具有相同的权重(如果有边则为 1,否则为 0)。如果您不需要找到最短路径,则可以查看任何其他可达性算法

最后,您可以尝试使用动态编程自己想出一些东西。这里的想法是建立一个结合部分解决方案的算法。例如:如果你被要求找到从 (5,5) 开始的路径,那么解决方案很简单——如果有一个“1”,你就完成了。如果您需要从 (5,5) 开始向北/向西,您需要检查是否有一个“1”连接到您之前的更简单子问题的解决方案。现在你需要继续并继续像这样组合解决方案,直到你有一个可以从 (0,0) 开始的通用解决方案。

告诉我们您是否需要有关这些主题的更多信息,但不要要求我们做您的功课。

祝你好运!

于 2014-05-21T23:47:41.520 回答