这是C(adjacency.c)中的prog,用于检查是否存在从节点a到节点b的有向图方式
# include <stdio.h>
# include <stdlib.h>
#define N 11
#define FALSE 0
#define TRUE 1
typedef int[N][N] adj_mat;
int path (adj_mat A, int u, int v)
void main()
{
adj_mat Matrix;
int dadnode, sonnode;
printf("bla-bla-bla enter nodes.\n");
printf("Press Ctrl+Z after finishing of bla-bla-bla all the nodes\n");
do {
printf("Enter the number of first node\n");
scanf("%d", &dadnode);
printf("Enter the number of second node\n");
scanf("%d", &sonnode;);
if ((dadnode < sonnode) && (sonnode <= N) && (dadnode > 0))
Matrix[dadnode][sonnode] = 1;
} while ( (dadnode != EOF ) && (sonnode != EOF));
printf("Now enter u and v nodes to check if exists way from u node to we node\n")
printf("Enter the number of u node\n");
scanf("%d", &dadnode);
printf("Enter the number of v node\n");
scanf("%d", &sonnode;);
if ((dadnode < sonnode) && (sonnode <= N) && (dadnode > 0))
{
if(path(Matrix,dadnode,sonnode) == TRUE )
printf ("Exists way from node u to node v ");
}
else printf printf ("Not exists way from node u to node v ");
}
int path (adj_mat A, int u, int v)
{
if (v >= u)
return FALSE;
int nodenum;
for(nodenum = v - 1; nodenum > 0; nodenum-- )
{
if (A[nodenum][v] == TRUE)
{
if (nodenum == u) /
return TRUE;
else if (path (adj_mat A, int u, int nodenum))
return TRUE;
}
}
return FALSE;
}
当我输入命令
时gcc -o adjacency -ansi adjacency.c
我得到了
adjacency.c:8:错误:预期的标识符或'('''''之前的标记
adjacency.c:10:错误:预期')'在'A'之前
adjacency.c:58:错误:预期')'在'A'之前
如何解决?
更新:感谢所有人的帮助。编译。
答案 0 :(得分:9)
您应将[N][N]
部分移至声明的末尾,并在path
的前向声明后添加分号。
typedef int adj_mat[N][N];
int path (adj_mat A, int u, int v);
其余代码中也存在不准确之处:
scanf("%d", &sonnode;);
有额外的分号,应为scanf("%d", &sonnode);
else printf printf
应为else printf
/
位于一行的末尾,不应该在那里main
需要返回int
答案 1 :(得分:4)
类型int[N][N]
无效C ++。尝试:
typedef int adj_mat[N][N];
代替。
另外:
您需要在行尾添加分号(';
'):
int path (adj_mat A, int u, int v)
printf("Now enter u and v nodes to check if exists way from u node to we node\n")
您不需要
中的第一个分号scanf("%d", &sonnode;);
中有一个额外的(多余的)printf
else printf printf ("Not exists way from node u to node v ");
中的行无效
if (nodenum == u) /
答案 2 :(得分:1)
在第10行的函数定义之后,你错过了分号:
int path (adj_mat A, int u, int v);
答案 3 :(得分:1)
下方末尾有一个分号丢失。
int path (adj_mat A, int u, int v);