算法导论22.1-3

  转置邻接表表示的无向、有向图.没有给出头文件,因为考虑到最近的头文件经常要append一些新东西,所以现在不给出来了.

  实现的时候用了位操作的方法,目的是标记.避免了V^2的空间浪费.当然了,只能应对整型的数据了.其实对浮点型应该也是可以的,但是位操作就不是这样的了.也是可以实现的.

  代码很简单,贴出来.

void GraphRepresentAsAdjacentMatrix ::transpose (void)
{
	if (m_currentSize < m_size)
	{
		std ::cerr << m_size - m_currentSize << "Vertex(es) has(have) not been input yet, can't transpose the graph." << std ::endl ;
		return ;
	}
	//	Using a skill to transpose the matrix.
	//	The skill is set bit mode to target new edge and old edge.
	for (int i = 0; i < m_size; ++i)
	{
		for (int j = 0; j < m_size; ++j)
		{
			if (m_matrix[i][j] != NotAdjoinTo)
			{
				//	Judging if m_matrix[i][j] is an old edge.
				//	New edge will be processed next because of that can process all new edge.
				if ((m_matrix[i][j] & 0x70000000) != 0x70000000)
				{
					//	m_matrix[i][j] is an old edge.
					m_matrix[j][i] = m_matrix[i][j] | 0x70000000 ;
					m_matrix[i][j] = NotAdjoinTo ;
				}
			}
		}
	}
	for (int i = 0; i < m_size; ++i)
	{
		for (int j = 0; j < m_size; ++j)
		{
			if (m_matrix[i][j] != NotAdjoinTo && (m_matrix[i][j] & 0x70000000) == 0x70000000)
			{
				m_matrix[i][j] = m_matrix[i][j] & 0x8FFFFFFF ;
			}
		}
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值