在广度优先搜索中确定 n children 的级别
determining level of n children in breadth first search
我无法确定广度优先搜索程序中结束顶点的级别。程序在下面,我给它的任何图表总是 returns 图中顶点的水平为 0。
我猜问题出在函数 "level" 函数如下:
int level(int n,int v,int a[20][20])
{
int i,j,k,count[20],le[20];
for(i=1;i<=n;i++)
count[i]=0;
for(k=0;k < n;k++)
{
for(i=1;i<=n;i++)
{
if(count[i]==k)
for(j=1;j<=n;j++)
{
if(count[j]==0 && a[i][j]==1)
count[j]=k+1;
else
count[j]=count[j];
}
}
}
for(i=1;i<=n;i++)
le[i]=count[i];
return (*le);
}
我正在尝试 return 数组 le "level" 每个顶点的水平和我的顶点是数字给定的。
我的主要功能如下,它工作正常并给出了图形是否连接:
int main()
{
int v,w,a[20][20],q[20],visited[20],n,i,j,count=0,le[20];
printf("\n Enter the number of vertices:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
q[i]=0;
visited[i]=0;
}
printf("\n Enter graph data in matrix form:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf("Is there an edge between (%d,%d)? ",i,j);
scanf("%d",&a[i][j]);
}
printf("\n Enter the starting vertex:");
scanf("%d",&v);
printf("\n Enter the ending vertex:");
scanf("%d",&w);
bfs(v,a,q,visited,n);
*le=level(n,v,a);
count=le[w];
if(visited[w]==1)
printf("\nBfs is possible at %d level\n",count);
else
printf("\n Bfs is not possible\n");
}
我已经return将数组作为指针编辑。可以吗?
您将 le
声明为 int le[20]
和 return *le
。这将 return 数组的第一个值。但是 le
和 buffer
的第一个值永远不会设置在 level.
数组 le
的内容未被 return 编辑。因此,当您在 main
中执行 count= le[w]
时,您会在调用 level
.
之前得到 le
中的内容
将 le
作为参数传递给 level
,就像您对 a
所做的那样。
level
中也有这个count[j] = count[j];
指令。该指令不执行任何操作。你确定这是你想要做的吗?
在 C 中,数组的索引从 0 到 n-1。您使用从 1 到 n 的范围。它很容易出错。例如,数组元素 buffer[0]
未初始化或设置。您应该坚持 0 到 n-1 的范围。
我没有完全理解你的代码,但是
有什么意义
count[j]=count[j];
?你能检查一下吗?
我无法确定广度优先搜索程序中结束顶点的级别。程序在下面,我给它的任何图表总是 returns 图中顶点的水平为 0。
我猜问题出在函数 "level" 函数如下:
int level(int n,int v,int a[20][20])
{
int i,j,k,count[20],le[20];
for(i=1;i<=n;i++)
count[i]=0;
for(k=0;k < n;k++)
{
for(i=1;i<=n;i++)
{
if(count[i]==k)
for(j=1;j<=n;j++)
{
if(count[j]==0 && a[i][j]==1)
count[j]=k+1;
else
count[j]=count[j];
}
}
}
for(i=1;i<=n;i++)
le[i]=count[i];
return (*le);
}
我正在尝试 return 数组 le "level" 每个顶点的水平和我的顶点是数字给定的。
我的主要功能如下,它工作正常并给出了图形是否连接:
int main()
{
int v,w,a[20][20],q[20],visited[20],n,i,j,count=0,le[20];
printf("\n Enter the number of vertices:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
q[i]=0;
visited[i]=0;
}
printf("\n Enter graph data in matrix form:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf("Is there an edge between (%d,%d)? ",i,j);
scanf("%d",&a[i][j]);
}
printf("\n Enter the starting vertex:");
scanf("%d",&v);
printf("\n Enter the ending vertex:");
scanf("%d",&w);
bfs(v,a,q,visited,n);
*le=level(n,v,a);
count=le[w];
if(visited[w]==1)
printf("\nBfs is possible at %d level\n",count);
else
printf("\n Bfs is not possible\n");
}
我已经return将数组作为指针编辑。可以吗?
您将 le
声明为 int le[20]
和 return *le
。这将 return 数组的第一个值。但是 le
和 buffer
的第一个值永远不会设置在 level.
数组 le
的内容未被 return 编辑。因此,当您在 main
中执行 count= le[w]
时,您会在调用 level
.
le
中的内容
将 le
作为参数传递给 level
,就像您对 a
所做的那样。
level
中也有这个count[j] = count[j];
指令。该指令不执行任何操作。你确定这是你想要做的吗?
在 C 中,数组的索引从 0 到 n-1。您使用从 1 到 n 的范围。它很容易出错。例如,数组元素 buffer[0]
未初始化或设置。您应该坚持 0 到 n-1 的范围。
我没有完全理解你的代码,但是
有什么意义count[j]=count[j];
?你能检查一下吗?