首页 > 试题广场 >

用邻接矩阵存储有n个结点(0,1,...,n)和e条边的有向

[单选题]

用邻接矩阵存储有n个结点(0,1,...,n)和e条边的有向图。在邻接矩阵中删除结点的时间复杂度是()

  • O(1)
  • O(n)
  • O(e)
  • O(n+e)
推荐
选B。
邻接矩阵用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据。
删除一个节点,需要对比所有元素,所以是n。


编辑于 2019-05-21 14:10:27 回复(0)
答案选B。
删除节点B时,在邻接矩阵中需要把指向B的边全部删除,B指向的边也全部删除。
而邻接矩阵表示法由一个顶点表(一维数组),一个边集(邻接矩阵,二维数组)组成。由顶点表查找i,复杂度为O(1),然后查找二维数组i行i列,i行i列均为0(即删除i节点),复杂度为2*O(n)。
结果为O(n),选择 B。
//邻接矩阵表示法
int i,j,k,w;
scanf("%d%d",&G->n,&G->e); //输入顶点数和边数
for(i = 0;i < G->n;i++) //读入顶点信息,建立顶点表
{
    G->vexs[i]=getchar();
}
for(i = 0;i < G->n;i++)
{
    for(j = 0;j < G->n;j++)
    {
        G->edges[i][j] = 0; //邻接矩阵初始化
    }
}
//构造邻接矩阵
for(k = 0;k < G->e;k++)
{//读入e条边,建立邻接矩阵
    scanf("%d%d%d",&i,&j,&w); //输入边(v i ,v j )上的权w
    G->edges[i][j]=w;
}
}//CreateMGraph


发表于 2020-05-02 10:14:14 回复(1)
邻接矩阵:

邻接表:


邻接矩阵存储与删除:
用一个一维数组存放所有顶点数据;
用一个二维数组存放顶点间关系(边或弧);
删除一个节点,需要对比所有元素,所以是n。
编辑于 2021-03-09 11:55:57 回复(0)
在邻接矩阵中删除结点i(0≤i≤n-1)的时间复杂度是!!!只删除结点
而邻接矩阵只有一个一维数组存所有顶点数据;而二维数组存放顶点间关系数据
而删除节点要对比所有数据,所以是n
发表于 2020-05-18 08:25:23 回复(0)

遍历所有节点,看是否有连线就行
发表于 2020-03-18 13:29:55 回复(0)
应该是O(2n)吧,因为不仅要归零出度,还要把入度归0。比如i=2时,不仅要归0i=2对应的行,还要归0j=2的那一列。
发表于 2023-10-16 14:53:21 回复(0)
求解,为什么不把领阶矩阵对应被删节点的行列删掉,不是删掉节点了么🤐
发表于 2020-09-04 17:36:20 回复(2)
选B。
邻接矩阵用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据。
删除一个节点,需要对比所有元素,所以是n。
发表于 2020-07-07 10:52:49 回复(1)
不懂,不应该也要把对应的边也删掉吗
发表于 2020-04-26 22:45:22 回复(0)