题目链接:Farm Irrigation
如左图所示,有11种管道,问给定一个图,最少要挖几个井才能灌溉到所有的管道
如右图,至少需要三个井口
两种做法DFS和并查集
难点在管道接口的判断:将一个块变成四个点,有管道伸出就是1,否则就为0
判断两个块是否在该方向管道是想通的 用&就可以了
int pipe[][4]={
{1,0,1,0},
{1,0,0,1},
{0,1,1,0},
{0,1,0,1},
{1,1,0,0},
{0,0,1,1},
{1,0,1,1},
{1,1,1,0},
{0,1,1,1},
{1,1,0,1},
{1,1,1,1}
};
DFS代码:
#include <stdio.h>
#include <memory.h>
#include <iostream>
using namespace std;
const int maxn=55;
int pipe[][4]=