gpt4 book ai didi

c - 在广度优先搜索中确定 n 个 child 的水平

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:53 25 4
gpt4 key购买 nike

我无法确定广度优先搜索程序中结束顶点的级别。该程序在下面,我给它的任何图形总是返回图形中顶点的级别为 0。

我猜问题出在函数“级别”,函数如下:

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);
}

我正在尝试返回包含每个顶点级别的数组文件“级别”,并且我的顶点以数字形式给出。

我的主要功能在下面,它工作正常并给出图形是否连接:

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");
}

我已将数组作为指针返回。可以吗?

最佳答案

你声明le作为 int le[20]并返回 *le .这将返回数组的第一个值。但是 le 的第一个值和 buffer永远不会设置水平。

数组的内容le不返回。所以当你做 count= le[w]main , 你得到了 le 中的内容在调用 level 之前.

通过 le作为 level 的参数就像你为 a 做的一样.

还有这个count[j] = count[j]; level 中的说明.该指令不执行任何操作。你确定这是你想要做的吗?

在 C 中,数组的索引从 0 到 n-1。您使用从 1 到 n 的范围。它很容易出错。例如数组元素 buffer[0]未初始化或设置。您应该坚持 0 到 n-1 的范围。

关于c - 在广度优先搜索中确定 n 个 child 的水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29295151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com