⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lxgraphl.cpp

📁 vc编写的数据结构
💻 CPP
字号:
// lxgraphl.cpp: implementation of the lxgraphl class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "lxgraphl.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


lxgraphl::lxgraphl(int numvert)
{
	int i;
	numvertex=numvert;
	numedge=0;
	mark = new int[numvert];
	for(i=0;i<numvertex;i++)
		mark[i]=0;
	vertex=new lxlist*[numvertex];
	for(i=0;i<=numvertex-1;i++)
    	vertex[i]= new lxlist(1);

}

lxgraphl::~lxgraphl()
{
	int i;
	delete [] mark;
	for(i=0;i<=numvertex-1;i++)
		delete vertex[i];
	delete [] vertex;

}

int lxgraphl::n()
{
	return numvertex;

}

int lxgraphl::e()
{
	return numedge;

}

int lxgraphl::first(int v)
{
	int t;
	lxedge it;
	vertex[v]->setStart();
	if(vertex[v]->getValue(it)) {t =it.vertex;return it.vertex;}
	else
		return numvertex;


}

int lxgraphl::next(int v1, int v2)
{
	lxedge it;	
	vertex[v1]->getValue(it);
	if(it.vertex==v2) vertex[v1]->next();
	else{
		vertex[v1]->setStart();
		while(vertex[v1]->getValue(it) && it.vertex<=v2)
			vertex[v1]->next();
	}
	if(vertex[v1]->getValue(it)) {int t= it.vertex;return it.vertex;}
	else return numvertex;

}

void lxgraphl::setedge(int v1, int v2, int wgt)
{
	lxedge it(v2,wgt);
	lxedge curr;
	vertex[v1]->getValue(curr);
	if(curr.vertex != v2) 
		for(vertex[v1]->setStart();vertex[v1]->getValue(curr);vertex[v1]->next())
			if(curr.vertex>=v2) break;
		if(curr.vertex==v2) vertex[v1]->remove(curr);
		else numedge++;
		vertex[v1]->insert(it);


	lxedge it1(v1,wgt);
	lxedge curr1;
	vertex[v2]->getValue(curr1);
	if(curr1.vertex != v1) 
		for(vertex[v2]->setStart();vertex[v2]->getValue(curr1);vertex[v2]->next())
			if(curr1.vertex>=v1) break;
		if(curr1.vertex==v1) vertex[v2]->remove(curr1);
		vertex[v2]->insert(it1);
}

void lxgraphl::deledge(int v1, int v2)
{
	lxedge curr;
	vertex[v1]->getValue(curr);
	if(curr.vertex != v2)
		for(vertex[v1]->setStart();vertex[v1]->getValue(curr);vertex[v1]->next())
			if(curr.vertex>=v2) break;
		if(curr.vertex==v2) {
				vertex[v1]->remove(curr);
				numedge--;
		}

	vertex[v2]->getValue(curr);
	if(curr.vertex != v1)
		for(vertex[v2]->setStart();vertex[v2]->getValue(curr);vertex[v2]->next())
			if(curr.vertex>=v1) break;
		if(curr.vertex==v1) {
				vertex[v2]->remove(curr);
		}
}

int lxgraphl::weight(int v1, int v2)
{
	lxedge curr;
	vertex[v1]->getValue(curr);
	if(curr.vertex != v2)
		for(vertex[v1]->setStart();vertex[v1]->getValue(curr);vertex[v1]->next())
			if(curr.vertex>=v2) break;
		if(curr.vertex==v2)
			return curr.weight;
		else return 0;

}

int lxgraphl::getmark(int v)
{
	return mark[v];

}

void lxgraphl::setmark(int v, int val)
{
	mark[v]=val;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -