c ++程序(矩阵和函数)

时间:2014-05-21 23:28:29

标签: c++ std iostream ctime time.h

请帮助我!我需要做一个程序,随机打印一个0x和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:对不起我的英语。

1 个答案:

答案 0 :(得分:0)

这个答案可能对你没什么帮助,但也许你会从中得到一些能引导你解决的问题。

你的矩阵是graph,其中一个是“节点”,两个之间的直接邻居(单元格的北/东/南/西)定义了一个“边缘”。您要求的是告诉是否(0,0)和(5,5)在该图中连接并给出路径(如果它们是。)

通过adjacency matrixadjacency list来表示图表是很常见的。一旦您在其中一个表示中解析了矩阵,您就可以尝试实现一些简单的图搜索算法,如Dijkstra's algorithm。某些方面变得特别容易,因为所有边缘具有相同的重量(如果有边缘则为1,否则为0)。如果您不需要找到最短路径,则可以查看任何其他reachability algorithms

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

告诉我们您是否需要更多关于这些主题的意见,但不要求我们做好您的作业。

祝你好运!