#include using namespace std; struct node { int num; int color; side* adjvex[7];

}; struct side { int border=0; node* vjex;

}; int main() { node* v[7]; int paint[4] = {1,2,3,4}; for (int i = 0; i < 7; i++) { v[i] = new node(); v[i]->num = i + 1; v[0]->adjvex[i]->border = 1; if (i < 6)v[0]->adjvex[i + 1]->vjex = v[i + 1]; }; v[0]->adjvex[0]->border = 0; v[1]->adjvex[0]->border = 1; v[1]->adjvex[2]->border = 1; v[2]->adjvex[3]->border = 1; v[2]->adjvex[4]->border = 1;v[2]->adjvex[0]->border = 1; v[2]->adjvex[1]->border = 1; v[3]->adjvex[0]->border = 1; v[3]->adjvex[2]->border = 1;v[3]->adjvex[4]->border = 1; v[4]->adjvex[0]->border = 1; v[4]->adjvex[2]->border = 1; v[4]->adjvex[5]->border = 1; v[5]->adjvex[0]->border = 1; v[5]->adjvex[4]->border = 1; v[6]->adjvex[0]->border = 1;//设置相邻的边border值为1

v[1]->adjvex[0]->vjex = v[0];
v[1]->adjvex[2]->vjex = v[2];
v[2]->adjvex[0]->vjex = v[0];
v[2]->adjvex[3]->vjex = v[3];
v[2]->adjvex[4]->vjex = v[4];
v[2]->adjvex[1]->vjex = v[1];
v[3]->adjvex[0]->vjex = v[0];
v[3]->adjvex[4]->vjex = v[4];
v[3]->adjvex[2]->vjex = v[2];
v[4]->adjvex[0]->vjex = v[0];
v[4]->adjvex[2]->vjex = v[2];
v[4]->adjvex[5]->vjex = v[5];
v[5]->adjvex[0]->vjex = v[0];
v[5]->adjvex[4]->vjex = v[4];
v[6]->adjvex[0]->vjex = v[0;//设置各个节点的关系

for (int i = 0,k=0;i<7 ;i++ )
{
	for (int j = 0; j < 7; j++)
	{
		if (v[i]->adjvex[j]->border == 1)
			v[j]->color = paint[k];
		else if (v[i]->adjvex[j]->border == 0 && i != j)
			v[i]->color = v[j]->color=paint[k];
	}
	k = (k + 1) % 4;
	
}
for (int i = 0; i < 7; i++) { cout << v[i]->color << " "; }

} 为什么adjvex不是node的成员内容:因为adjvex是一个指向side结构体的指针数组,它是与node结构体无关的。在这个程序中,side结构体表示的是边,而node结构体表示的是节点,它们之间是一种关联关系,因此需要使用指针来实现。同时,adjvex数组的作用是存储与该节点相邻的边,因此也需要定义在side结构体中。

C++ 图数据结构实现 - 节点和边关系示例

原文地址: https://www.cveoy.top/t/topic/ohwc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录