【发布时间】:2021-02-02 14:47:35
【问题描述】:
我要写一个程序,它将以邻接表和邻接矩阵的形式显示图形结果。我已经通过 YT 上的教程指导自己如何实现邻接列表,并使用当前存储的数据(用户正在介绍自己,例如节点数、边数、边连接的边数以及哪一个)我想知道/了解如何使用已经存储的数据来构建邻接矩阵。
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
void read_graf(struct node *ad[], int no_of_nodes);
void print_graf(struct node *ad[], int no_of_nodes);
int main()
{
int op;
int i,j,k, nodes;
begin:
printf("Type in the number of edges: ");
scanf("%d", &nodes);
struct node *adj[nodes];
for (i=0;i<nodes;i++)
adj[i] = NULL;
read_graf(adj,nodes);
print_graf(adj,nodes);
printf("\nDo you want to try again? 1 for yes and 0 for no: ");
scanf("%d", &op);
if (op==1)
goto begin;
else
{
printf("Thank you for visiting! :)");
exit(0);
}
return 0;
}
void read_graf(struct node *ad[], int no_of_nodes)
{
struct node *new_node;
int i,j,k, val;
for (i=0;i<no_of_nodes;i++)
{
struct node *last= NULL;
printf("\n To how many edges is edge %d connected to: ", i+1);
scanf("%d", &k);
for (j=0;j<k;j++)
{
printf("To which edges is it connected : ");
scanf("%d", &val);
new_node = (struct node *)malloc(sizeof(struct node*));
new_node->data = val;
new_node->next = NULL;
if(ad[i]==NULL)
ad[i]= new_node;
else
last->next = new_node;
last = new_node;
}
}
}
void print_graf(struct node *ad[], int no_of_nodes)
{
struct node *ptr = NULL;
int i,j;
for(i=0;i<no_of_nodes;i++)
{
ptr = ad[i];
printf("\n x%d : ", i+1);
while(ptr != NULL)
{
printf("%d,\t", ptr->data);
ptr = ptr->next;
}
printf("0");
}
}
【问题讨论】:
-
如果
data代表节点连接的边的索引,考虑print_graf的内循环,使其成为所有节点j的循环。如果j != ptr->data或1否则应该打印0而不是打印ptr->data的值(在这种情况下更新ptr)。 -
@Bob__ 抱歉,但我不太明白这一点。 i 应该创建一个 i 和 j 的双循环,其中 i 应该包含 ptr = ad[i][j],然后在这个循环中,如果 j != ptr->data 则 a 应该使用 if 语句打印 0,否则打印 1 ?我试过这个,
void print_graf2(struct node *ad[], int no_of_nodes) { struct node *ptr = NULL; int i,j; for(i=0; i<no_of_nodes; i++) { for(j=0; j<no_of_nodes; j++) { ptr = ad[i][j]; if(j!=ptr->data) { printf("0"); } else { printf("1"); } } } } -
@Bob__ 但它给了我这个 |error: incompatible types when assignment to type 'struct node *' from type 'struct node'|