问题遇到的现象和发生背景
为什么运行马上就结束了。题目为;
根据输入的图的邻接矩阵A,判断此图的连通分量的个数。
输入形式
第一行为图的结点个数n,之后的n行为邻接矩阵的内容,每行n个数表示。其中A[i][j]=1表示两个结点邻接,而A[i][j]=0表示两个结点无邻接关系。
输出形式
输出此图连通分量的个数。
样例输入
5
0 1 1 0 0
1 0 1 0 0
1 1 0 0 0
0 0 0 0 1
0 0 0 1 0
样例输出
2
样例说明
邻接矩阵中对角线上的元素都用0表示。(单个独立结点,即与其它结点都没有边连接,也算一个连通分量)
问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define max 10000
#define True 1
#define False 0
#define Error -1
#define OK 1
//领接矩阵结构
typedef struct ArcNode{
int adj;
}ArcNode;
typedef struct {
int vertex[max];
ArcNode arcs[max][max];
int vexnum;//顶点数和弧数
}AdjMatrix;
int hensaomiao(int i,int visit[],AdjMatrix g)
{
visit[i]=0;
for(int j=0;j<g.vexnum;j++)
{
if(g.arcs[i][j].adj==1&&(visit[j]!=0))
hensaomiao(j,visit,g);
}
}
int bianli(int n,AdjMatrix g)
{
int visit[n];
for(int i=0;i<n;i++)
visit[i]=1;//将所以顶点记录为没有扫描
int sum=0;//用来记录子连通数目
for(int i=0;i<n;i++)
{
if(visit[i]!=0)//说明没有被扫描
{
hensaomiao(i,&visit[i],g);
sum++;
}
}
return sum;
}
int main()
{
int n,i,j;
AdjMatrix g;
scanf("%d",&n);
g.vexnum=n;
for(i=0;i<g.vexnum;i++)
for(j=0;j<g.vexnum;j++)
scanf("%d",&g.arcs[i][j].adj);
int w;
w=bianli(n,g);
printf("%d",w);
return 0;
}
运行结果及报错内容
什么也没有直接结束
我的解答思路和尝试过的方法
我感觉是函数部分写错了,但是不知道怎么改。