(1)以“圆圈”表示元素;
(2)若x≤y,则y画在x的上层;
(3)若y覆盖x,则连线;
(4)不可比的元素可画在同一层。
例题:画出下列各关系的哈斯图
1)P={1,2,3,4},<P,≤>的哈斯图。
2)A={2,3,6,12,24,36},<A,整除>的哈斯图。
3)A={1,2,3,5,6,10,15,30},<A,整除>的哈斯图。
哈斯图L-1
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e3 + 10;
int a[N][N];
/*
5
1 0 1 0 1
0 1 0 1 1
0 0 1 0 1
0 0 0 1 1
0 0 0 0 1
*/
int main()
{
int n;
cout << "请输入矩阵维数:" << endl;
cin >> n; //输入矩阵维数
//输入矩阵
cout << "请输入一个" << n << '*' << n << "的矩阵:" << endl;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
cout << endl;
//消去自环
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i == j) a[i][j] = 0;
}
}
//进行处理
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i == j) continue;
for (int k = 1; k <= n; k++)
{
if (j == k) continue;
if (a[i][j] == 1 && a[j][k] == 1) a[i][k] = 0;
}
}
}
//输出哈斯图
cout << "所得哈斯图如下:" << endl;
cout << " ";
for (int i = 1; i <= n - 1; i++) cout << "x" << i << ' ';
cout << endl;
for (int i = n; i >= 2; i--)
{
cout << "x" << i;
for (int j = 1; j <= i - 1; j++)
{
cout << ' ' << a[j][i] << ' ';
}
cout << endl;
}
cout << endl;
return 0;
}