#include<iostream>
const int N = 50;
using namespace std;
void creat_matrix(int a[N][N], int n)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
}
bool color_matrix( int color[N],int a[N][N],int n)
{
for (int i = 0; i < n; i++)
{
if (color[i] == 0)
color[i] = 1;
for (int j = 0; j < n; j++)
{
if (a[i][j] && i != j)//如果ij相邻且不是自身的点
{
if (color[j] == 0)//如果j未着色
{
color[j] = -color[i];//j相反颜色
}
else//如果已着色
{
if (color[i] == color[j])//颜色相同
return 0;
else//颜色不同
continue;
}
}
}
}
return 1;
}
int main()
{
int n;
cout << "请输入顶点个数:" << endl;
cin >> n;
cout << "请输入邻接矩阵:" << endl;
int a[N][N];
int flag = -1;
int color[N] = { 0 };//红1黑-1
creat_matrix(a, n);//输入邻接矩阵
flag=color_matrix(color,a, n);//上色并判断
if (flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}
//YES
/*
9
0 0 0 0 1 1 0 0 1
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0
1 0 0 0 0 0 0 0 0
*/
/*
6
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1
1 1 1 0 0 0
1 1 1 0 0 0
1 1 1 0 0 0
*/
//NO
/*
6
0 1 0 1 1 0
1 0 0 0 1 1
0 0 0 0 0 1
1 0 0 0 0 0
1 1 0 0 0 0
0 0 1 1 0 0
*/
【离散数学】编程判断二部图
最新推荐文章于 2023-05-30 17:24:48 发布