程序来源:《挑战程序设计竞赛》2.5.3
#include<iostream>
using namespace std;
#include<vector>
#define MAX_N 100
vector<int> G[MAX_N]; //图
int V, E; //顶点
int color[MAX_N]; //颜色 -1 或 1
bool dfs(int v, int c) //判断顶点v是否可以染成颜色c
{
color[v] = c; //顶点v染色成颜色c
for (int i = 0; i < G[v].size(); i++)
{
if (color[G[v][i]] == c) return false; //v与周围点颜色相同,返回false
if (color[G[v][i]] == 0 && !dfs(G[v][i], -c)) return false; //如果v指向的点i未染色且v指向的点i无法被染成-c
}
return true;
}
void test01()
{
for (int i = 0; i < V; i++)
{
if (color[i] == 0)
{
if (!dfs(i, 1))
{
cout << "no" << endl;
return;
}
}
}
cout << "yes" << endl;
}
int main()
{
cout << "请输入顶点和边的个数" << endl;
cin >> V >> E; // 输入顶点和边的个数
cout << "请输入起点和终点" << endl;
for (int i = 0; i < E; i++)
{
int s, t;
cin >> s >> t;
G[s].push_back(t);
}
test01();
return 0;
}