【发布时间】:2016-12-10 17:24:02
【问题描述】:
我在这里陷入了一个循环。我有一个用零填充的矩阵,我想在图中添加 k 个边。我在 Visual Studio 中没有显示错误。当它进入这行代码时:
int z = 0;
while (z!=k);
{
int a = std::rand() % n;
int b = std::rand() % n;
if ((v[a][b] != 1) && (a != b))
{
v[a][b] = 1;
v[b][a] = 1;
z++;
}
}
程序陷入无限循环;
这里是完整的代码:
std::vector<std::vector<int>> random_gnk(int n, int k)
{
srand(time(NULL));
int temp = 0;
for (int i = 0; i < n; i++)
{
temp = temp + i;
}
std::vector<std::vector<int>> v;
if (k > temp || k<0)
{
std::cout << "Blad. Podano zla liczbe krawedzi." << std::endl;
return v;
}
for (int i = 0; i < n; i++)
{
std::vector<int>row;
for (int j = 0; j < n; j++)
{
row.push_back(0);
}
v.push_back(row);
}
int z = 0;
while (z!=k);
{
int a = std::rand() % n;
int b = std::rand() % n;
if ((v[a][b] != 1) && (a != b))
{
v[a][b] = 1;
v[b][a] = 1;
z++;
}
}
return v;
}
void GNK()
{
int n, k;
std::cout << "Podaj wielkosc n grafu: " << std::endl;
std::cin >> n;
std::cout << "Podaj liczbe k krawedzi grafu: " << std::endl;
std::cin >> k;
print_matrix(random_gnk(n, k));
return;
}
【问题讨论】:
-
我们能看到 n、v 和 k 的声明吗?
-
当您使用调试器单步执行此操作时会发生什么?
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
除了未知变量的定义,还请说明你是如何初始化它们的,它们的值是什么。
-
当我使用调试器时它在 while (z!=k); 之后卡住了{