请帮助我!我需要做一个程序,随机打印一个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:对不起我的英语。
答案 0 :(得分:0)
这个答案可能对你没什么帮助,但也许你会从中得到一些能引导你解决的问题。
你的矩阵是graph,其中一个是“节点”,两个之间的直接邻居(单元格的北/东/南/西)定义了一个“边缘”。您要求的是告诉是否(0,0)和(5,5)在该图中连接并给出路径(如果它们是。)
通过adjacency matrix或adjacency list来表示图表是很常见的。一旦您在其中一个表示中解析了矩阵,您就可以尝试实现一些简单的图搜索算法,如Dijkstra's algorithm。某些方面变得特别容易,因为所有边缘具有相同的重量(如果有边缘则为1,否则为0)。如果您不需要找到最短路径,则可以查看任何其他reachability algorithms。
最后,您可以尝试使用dynamic programming自行提出一些问题。这里的想法是建立一个结合部分解决方案的算法。例如:如果你被要求找到一个从(5,5)开始的路径,那么解决方案是微不足道的 - 如果有一个“1”,你就完成了。如果您需要从(5,5)开始向北/向西,您需要检查是否有一个“1”连接到您之前更简单的子问题的解决方案。现在你需要继续并继续组合这样的解决方案,直到你有一个可以从(0,0)开始的通用解决方案。
告诉我们您是否需要更多关于这些主题的意见,但不要求我们做好您的作业。
祝你好运!