问题 D: 过山车(二分图)

问题 D: 过山车(二分图)_第1张图片

问题 D: 过山车(二分图)_第2张图片问题 D: 过山车(二分图)_第3张图片

首先,绘制二分图

核心思想:

对于每一个左边端点,查找每个右边端点

右边端点无对象,则暂时作为该左端点的对象

右边端点有对象递归查询其对象是否有其他选择

(1.若有其他选择,选择其他,2.当前左端点作为当前右端点的对象)

AC代码:

#include
#include
using namespace std;
// 组合关系图
int map[509][509] = { 0 };

// 标记数组
int visit[509][509] = {0};

// 右边对象数组
int right1[509] = { 0 };

int dfs(int x);
int num = 0;		

int wm = 0, m = 0;
int main()
{
	
	while (scanf("%d", &num) && num != 0)
	{
		scanf("%d%d", &wm, &m);
		
		// 输入组合
		for(int i=0;i

你可能感兴趣的:(二分图,深度优先,图论,算法)