【发布时间】:2019-04-03 23:17:34
【问题描述】:
我们想让这个人从头到尾经过的村庄。
1/用户应输入村庄数量并将路径转换为矩阵
a b c d e f 是村庄
如果两个村庄之间有桥1,如果没有0
注意:用户是填写矩阵的人,不包括字母
******************.********************************* ****************************************************** *************** 我选择做什么,但我认为我们也可以使用递归
******************循环************************
循环逐行开始
如果它得到一个0 然后i++ 否则如果它得到1 它打印位置然后它跳转到另一行
示例 1:
它从a[0][0]开始到b[0][1]然后跳转指针跳转到b[1][0]和
在这两种情况下,我们将b 设置为0。所以我们没有重复相同的情况
在前面的示例中,它应该打印a and b 和c and d 的坐标
在示例 2 中,它应该打印 a c b d f 的坐标,这是我的尝试
void permut(int *x, int *y)
{
int c;
c = *x;
*x = *y;
*y = c;
}
main()
{
int x, y;
//creation
cout << "donner la talle de matrice (ligne puis colone) : \n";
cin >> x >> y;
int **grid = new int *[y];
for (int i = 0; i < y; ++i)
{
grid[i] = new int[x];
}
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
cout << "t[" << i << "][" << j << "] : ";
cin >> grid[i][j];
}
}
for (int i = 0; i < x; i++)
{
cout << "\n";
for (int j = 0; j < y; j++)
{
cout << grid[i][j] << "\t";
}
cout << "\n";
}
cout << "\n\n\n";
do
{
int i , j;
if (grid[i][j] == 1)
{
cout << i << " " << j << "\n";
permut(&i, &j);
grid[i][j] = 0;
grid[j][j] = 0;
continue;
}
else if (grid[i][j] == 0)
{
i++;
continue;
}
else
break;
}while (1);
//delete
for (int i = 0; i < y; ++i)
{
delete[] grid[i];
}
delete[] grid;
system("pause");
return 0;
}
【问题讨论】:
-
您可能想了解ClangFormat 或其他方式来格式化您的代码。这不读起来很愉快。
-
为什么在 2018 年使用手动内存管理(
delete[]等)?我们有容器。我们有智能指针。不要像 1998 年那样编写 C++ - 请。拥抱 C++17(或至少 C++11)。 -
为什么你的
permut函数存在?你不想要std::swap吗? -
现代 C++ 也有这种巧妙的东西,称为基于范围的 for 循环 - 和
algorithms。 -
main()是完全错误的。main返回int- 总是。你甚至没有错误void那里的返回值。