分析
给定一些城镇和相邻关系,如果要建造服务站,服务站只能服务建造地所在的城镇和其相邻的城镇,问最少要建几个服务站?
对每一个城镇,判断是否需要在此处建造服务站,即相邻的城镇是否还需要建站。如果不需要则此处不建站(如该镇自身未建站则需建站)。继续判断下一个城镇。这里进行了一定剪枝,如果当前城镇之前的城镇未能享受服务,并且其相邻的最大城镇小于当前城镇,即不可能再使之前那个城镇享受到服务,所以这种安排是不可以的。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAX_V 40
using std::sort;
int V, E, min;
int edge[MAX_V][MAX_V], top[MAX_V], vis[MAX_V];
void dfs(int p, int n, int s)
{
if (n == V && s < min) { min = s; return; }
if (p > V || s >= min) return;
for (int i = 1; i < p; i++)
if (!vis[i] && edge[i][top[i]-1] < p) return;
int r = 0;
for (int i = 0; i < top[p]; i++) {
if (!vis[edge[p][i]]) r++;
vis[edge[p][i]]++;
}
if (r) dfs(p + 1, n + r, s + 1);
for (int i = 0; i < top[p]; i++)
vis[edge[p][i]]--;
dfs(p + 1, n, s);
}
void solve()
{
for (int i = 1; i <= V; i++) {
edge[i][top[i]++] = i;
sort(edge[i], edge[i]+top[i]);
}
min = V;
dfs(1, 0, 0);
printf("%d\n", min);
}
int main()
{
while (scanf("%d%d", &V, &E), (V + E)) {
memset(edge, 0, sizeof(edge));
memset(top, 0, sizeof(top));
memset(vis, 0, sizeof(vis));
int v1, v2;
for (int i = 0; i < E; i++) {
scanf("%d%d", &v1, &v2);
edge[v1][top[v1]++] = v2;
edge[v2][top[v2]++] = v1;
}
solve();
}
return 0;
}
题目
Description
A company offers personal computers for sale in N towns (3 ≤ N ≤ 35). The towns are denoted by 1, 2, … , N. There are direct routes connecting M pairs from among these towns. The company decides to build servicing stations in several towns, so that for any town X, there would be a station located either in X or in some immediately neighbouring town of X.
Write a program for finding out the minumum number of stations, which the company has to build, so that the above condition holds.
Input
The input consists of more than one description of town (but totally, less than ten descriptions). Every description starts with number N of towns and number M of pairs of towns directly connected each other. The integers N and M are separated by a space. Every one of the next M rows contains a pair of connected towns, one pair per row. The pair consists of two integers for town’s numbers, separated
by a space. The input ends with N = 0 and M = 0.
Output
For every town in the input write a line containing the obtained minimum.
Sample Input
8 12 1 2 1 6 1 8 2 3 2 6 3 4 3 5 4 5 4 7 5 6 6 7 6 8 12 51 12 10 7 12 2 8 1 12 9 12 11 3 11 7 4 12 3 4 2 3 5 3 2 5 10 1 7 2 1 6 6 5 6 8 4 11 8 7 3 7 11 2 11 9 3 10 9 5 8 9 8 10 4 10 7 6 5 8 1 5 4 7 4 6 4 5 2 10 2 4 6 11 11 12 12 8 8 3 11 10 10 5 7 9 9 6 2 6 7 5 1 2 4 8 3 9 10 7 6 3 1 8 25 251 24 25 22 17 19 20 9 23 25 10 9 17 5 15 1 12 20 16 4 15 12 11 11 23 15 10 21 24 15 20 10 13 23 22 4 3 25 21 18 14 22 5 11 14 15 18 11 15 4 8 15 23 13 1 4 13 7 16 18 24 25 6 6 12 17 4 19 22 2 20 16 21 7 1 9 19 10 1 16 17 24 5 12 22 24 17 20 13 15 7 6 21 23 24 19 21 16 19 21 14 25 23 3 20 23 13 8 15 7 6 2 19 11 19 3 25 21 23 9 12 7 13 6 11 12 8 14 9 20 7 3 17 24 6 12 3 5 7 5 21 25 9 13 16 18 25 15 12 2 5 2 17 4 20 4 7 7 17 13 24 21 2 17 10 8 7 10 18 17 12 14 7 25 4 7 25 2 24 9 21 10 6 21 11 11 9 18 12 19 3 9 20 15 2 25 11 22 21 14 19 8 10 8 17 20 10 2 1 6 8 18 17 6 3 22 3 6 5 18 3 18 9 24 19 23 12 19 17 20 18 10 24 22 24 3 7 17 23 18 23 2 3 17 11 22 6 24 11 22 16 6 15 5 9 6 23 5 16 4 1 19 15 21 10 11 7 6 13 9 15 11 5 4 24 16 6 11 1 14 20 5 13 17 15 19 6 4 9 10 14 1 17 5 12 8 21 16 15 18 4 16 25 15 21 19 18 11 3 2 11 19 12 23 19 5 19 6 17 20 1 18 22 14 25 1 25 9 24 17 14 12 24 10 22 8 22 10 9 25 12 22 13 20 6 23 20 13 8 3 16 22 1 14 5 15 14 2 22 18 2 4 2 13 18 2 16 3 15 11 8 2 10 17 25 8 5 4 22 23 4 20 21 16 8 23 10 22 25 12 14 25 15 22 11 1 19 13 3 11 10 1 6 8 14 5 23 10 12 24 8 6 14 18 21 13 12 22 20 15 22 2 6 3 8 16 18 14 13 2 8 11 16 13 11 3 21 16 10 23 3 7 24 3 24 16 12 23 16 25 19 13 19 1 18 2 23 20 24 7 12 13 15 24 1 25 13 15 24 14 24 14 1 2 14 19 4 4 10 21 7 7 2 21 4 8 18 11 18 25 20 17 20 18 7 4 11 8 19 13 2 16 24 18 55 9 14 17 7 14 6 12 7 3 7 11 3 7 15 4 15 14 2 5 6 13 9 14 4 12 2 16 4 3 6 13 8 5 10 7 5 16 13 4 11 10 17 9 11 9 6 10 11 1 5 11 6 6 18 10 3 6 12 18 15 4 17 9 7 4 3 7 14 16 17 5 3 13 6 1 10 2 3 6 4 12 4 12 9 14 10 13 17 11 14 1 12 16 3 16 6 2 9 18 13 13 2 6 17 16 9 15 12 17 5 27 308 5 22 9 24 16 19 25 24 23 2 10 16 5 15 22 19 27 21 9 19 6 15 16 11 3 15 15 19 27 14 9 23 13 12 19 25 5 23 14 6 2 13 21 20 10 13 1 4 23 27 10 15 15 1 6 25 17 23 25 10 8 18 26 22 20 7 11 19 26 7 25 3 23 13 26 18 27 25 18 10 5 4 19 4 14 19 24 16 25 23 5 21 12 10 15 27 12 5 4 10 4 20 17 16 18 15 15 25 24 3 13 15 26 6 17 12 25 8 4 8 6 8 5 11 23 3 21 4 20 1 16 7 8 3 20 19 8 15 26 14 12 11 13 18 24 11 14 5 17 27 14 3 26 16 8 19 20 3 4 18 7 18 7 4 16 13 21 16 22 16 5 16 4 3 24 5 1 16 24 18 6 1 1 2 15 20 19 7 15 2 5 25 27 8 27 12 9 21 26 10 26 17 16 23 21 7 17 14 26 5 23 10 13 19 10 5 1 18 22 20 2 11 6 17 13 11 4 15 7 17 14 2 1 12 20 24 1 9 23 1 23 19 1 10 23 11 24 22 17 18 18 19 20 18 22 13 25 1 27 18 18 2 4 9 18 21 12 24 17 21 25 9 24 4 14 23 7 8 4 25 19 27 24 6 16 27 11 6 7 22 12 25 21 12 16 14 22 14 22 6 14 21 5 20 20 6 18 5 12 20 2 10 11 8 16 6 26 27 16 25 19 2 22 8 16 18 3 13 2 7 5 1 1 19 11 3 3 10 12 9 24 17 9 11 11 14 26 15 26 13 8 5 17 9 3 21 13 7 26 21 17 1 13 14 1 3 7 9 3 16 14 25 13 4 19 3 9 14 7 23 5 3 27 5 21 10 12 16 20 14 26 23 11 7 4 23 21 8 11 25 13 21 17 2 15 23 2 20 17 20 18 3 15 9 22 25 19 26 19 17 12 18 12 2 3 22 10 19 22 21 21 25 5 7 19 12 19 6 11 21 2 3 25 26 24 14 2 26 10 11 13 20 10 17 13 25 8 17 15 12 7 25 25 18 4 14 14 7 6 9 1 7 6 10 27 11 8 23 6 2 24 2 2 22 27 9 3 26 15 16 3 12 9 5 16 9 24 1 26 12 9 3 1 11 12 22 20 11 10 27 22 18 13 6 15 22 13 17 7 24 27 7 26 24 7 15 24 8 12 6 6 21 19 21 19 5 23 12 25 20 9 13 15 21 6 5 4 26 5 2 10 9 27 6 8 10 25 2 9 2 9 18 7 6 4 6 10 20 24 15 2 8 22 9 19 24 16 8 13 1 11 17 1 21 18 11 17 25 23 6 16 20 11 26 5 13 27 2 11 22 27 20 16 2 22 27 24 23 10 22 26 20 14 10 12 8 4 5 2 4 1 4 3 2 3 1 4 3 23 100 7 12 18 12 1 2 22 3 9 19 21 8 16 6 5 19 10 3 14 4 9 7 11 12 3 21 23 16 8 12 2 6 2 16 6 11 2 22 15 22 3 4 1 16 21 2 14 18 5 9 11 2 19 3 3 23 8 14 23 19 4 17 13 14 23 9 4 9 4 15 12 14 20 10 5 13 22 6 8 17 19 12 4 11 20 9 1 11 15 17 22 7 17 2 23 18 14 5 10 21 4 6 15 21 7 10 11 19 19 7 12 15 2 10 13 23 11 5 17 6 13 3 20 16 17 19 22 17 8 6 5 12 18 5 2 20 19 8 9 8 23 2 14 3 16 5 13 7 5 20 13 18 4 20 22 18 9 1 18 16 8 23 13 19 17 23 7 18 18 17 16 7 19 16 16 9 4 8 18 2 10 8 18 11 14 15 7 1 6 13 14 10 10 19 8 22 17 11 4 22 28 260 18 14 13 11 9 5 5 19 15 6 8 9 14 2 14 13 5 23 28 25 17 14 18 27 11 2 16 20 25 16 23 2 28 22 13 2 27 13 8 27 20 12 18 24 22 5 22 25 3 13 12 26 7 26 7 19 10 26 27 25 22 13 4 3 22 6 17 7 13 23 8 14 12 13 10 15 15 18 26 16 21 16 3 18 15 8 8 11 7 21 21 26 22 3 16 15 18 6 24 20 19 15 26 27 22 4 25 10 12 24 7 2 19 16 3 7 24 7 7 28 6 8 2 24 3 12 16 8 23 10 18 25 3 2 5 25 12 6 6 24 28 10 14 24 24 13 12 10 9 23 17 8 27 7 15 3 13 7 26 18 21 25 22 7 3 14 15 22 12 19 8 18 4 16 7 6 19 4 7 15 25 8 22 26 17 27 22 1 21 28 20 22 12 17 10 17 15 12 4 21 6 5 18 20 19 3 9 2 21 2 6 13 20 11 4 9 20 1 14 27 9 10 18 9 4 23 8 1 22 12 2 27 5 1 13 19 10 27 22 8 25 6 28 27 11 19 8 13 3 27 16 12 9 12 6 14 9 22 5 21 13 4 8 7 27 9 26 4 14 15 25 1 3 8 11 17 7 25 1 2 23 6 14 10 23 14 28 23 24 22 24 26 11 24 5 11 17 15 28 6 28 16 10 2 22 11 20 5 4 8 2 18 1 13 23 12 25 12 17 5 13 21 23 22 3 5 4 27 25 2 27 23 27 12 1 4 17 20 19 23 1 19 14 22 25 23 15 28 4 28 11 21 2 6 5 15 11 26 14 9 16 5 21 17 21 10 13 10 24 5 16 17 16 11 13 15 14 19 10 18 19 8 21 27 7 14 24 21 10 19 20 23 28 20 18 5 22 17 11 23 19 27 16 9 9 25 6 9 24 16 11 6 10 5 22 27 15 9 20 14 2 22 26 8 4 7 23 18 10 24 24 28 10 22 24 25 18 17 4 25 16 14 18 19 2 28 20 21 9 26 24 17 19 26 3 16 10 16 3 6 14 21 11 7 9 21 18 21 4 12 11 12 17 25 14 26 14 28 20 7 25 3 18 13 19 21 8 5 9 7 6 16 26 2 8 12 11 15 26 28 1 6 11 10 2 19 14 1 8 28 27 16 12 28 19 20 18 12 19 24 23 33 23 13 14 13 6 22 21 17 8 18 17 8 13 22 7 2 21 10 9 23 15 8 18 11 3 17 2 6 13 17 15 20 20 18 6 9 16 12 21 15 3 10 6 10 7 19 15 5 7 10 17 9 22 7 20 14 17 16 1 13 6 19 13 11 16 13 14 74 5 3 2 5 9 6 11 10 10 6 13 7 13 5 12 13 8 3 6 7 12 5 10 4 7 2 2 8 4 11 2 10 9 11 3 4 14 1 8 9 2 4 9 13 10 13 3 11 6 3 7 10 6 13 14 10 14 5 5 7 11 13 8 13 2 1 14 7 13 14 2 9 3 12 8 10 10 12 10 3 12 4 6 1 9 14 11 14 12 7 1 5 14 2 1 8 11 8 11 7 2 13 9 3 2 6 4 6 10 5 11 2 8 12 6 5 3 13 10 1 5 4 1 13 5 9 8 14 11 1 4 13 6 11 4 1 7 3 1 9 9 10 11 12 12 2 12 6 23 207 11 10 19 12 13 12 23 15 18 7 7 19 22 23 6 10 17 23 16 10 18 17 15 17 3 9 9 11 20 6 4 17 14 22 18 2 20 18 5 13 5 17 20 15 22 16 5 7 13 22 8 14 4 11 6 12 5 15 4 23 18 6 13 20 15 3 18 21 11 12 22 17 2 4 20 11 12 22 4 6 20 23 21 12 6 5 12 1 11 22 5 11 7 10 20 22 7 13 1 14 12 7 13 3 8 22 3 21 21 16 5 2 4 22 14 19 19 18 3 10 12 10 19 4 7 4 6 19 16 2 9 10 20 17 15 2 5 23 23 10 5 12 17 16 19 13 22 10 15 4 3 11 12 3 7 21 7 8 18 10 2 10 5 8 3 8 12 15 7 15 23 21 11 2 9 19 17 14 4 13 5 16 23 13 17 11 1 3 10 15 20 16 16 7 3 17 16 12 12 23 15 19 3 6 21 20 20 2 23 14 21 8 2 21 11 21 13 6 23 1 7 22 7 14 15 9 21 22 19 11 8 10 7 6 19 22 9 6 10 13 19 10 20 3 20 8 21 19 6 21 2 23 16 13 9 8 13 21 17 13 6 23 1 18 22 2 23 8 8 16 20 10 5 4 5 14 2 17 18 14 15 8 7 3 3 18 13 14 18 8 17 6 4 12 16 23 8 1 2 9 20 14 23 3 15 13 9 22 1 6 2 14 3 19 18 15 14 16 20 9 11 18 7 2 7 9 18 13 15 21 16 3 16 18 11 8 1 11 6 16 17 19 7 20 2 1 10 4 12 14 8 2 20 19 11 7 6 8 4 18 18 12 10 5 18 5 1 16 3 4 8 19 17 7 15 22 19 2 4 8 1 19 9 18 10 21 14 3 1 10 5 21 5 9 8 13 12 8 3 2 2 6 2 12 12 20 9 14 20 4 2 13 17 8 17 33 14 15 4 8 11 6 16 4 6 10 17 13 10 13 15 5 7 6 13 8 1 12 7 17 11 13 16 5 16 11 5 12 12 13 8 5 8 6 13 3 7 14 4 2 14 10 17 14 1 4 11 12 10 17 13 5 17 12 11 8 15 13 4 11 13 16 32 132 18 27 20 25 19 9 1 13 8 30 16 24 22 8 3 27 30 25 17 18 17 20 8 26 9 12 6 31 5 10 6 28 3 22 2 21 2 25 27 10 31 21 29 10 23 30 22 19 29 7 2 30 28 25 15 23 9 4 1 23 7 24 14 28 20 10 20 23 28 21 12 2 4 14 29 3 30 21 12 26 28 7 28 29 15 32 21 17 2 29 16 15 19 15 14 27 29 20 6 26 24 6 1 8 7 15 29 19 18 15 9 24 8 29 12 10 23 4 11 4 11 1 4 2 18 9 5 8 25 29 30 27 10 19 16 19 9 15 16 28 20 31 30 29 30 24 5 13 23 7 19 25 27 31 31 29 27 16 18 21 10 16 7 2 14 30 9 8 18 31 17 22 17 13 30 32 14 22 25 18 7 9 17 10 4 17 31 32 6 1 13 20 27 25 26 10 22 6 11 18 21 13 6 19 12 8 10 18 20 8 2 6 27 6 28 9 17 24 16 25 30 15 22 26 3 31 30 3 21 26 23 3 4 12 22 25 23 22 23 14 17 7 7 11 19 24 20 14 29 4 24 12 28 27 19 18 17 3 2 18 22 28 15 10 27 91 6 25 9 3 9 15 9 5 8 24 27 24 12 20 11 17 15 10 3 22 10 26 11 24 2 10 27 7 5 15 26 19 22 5 2 24 19 4 24 4 6 15 21 13 13 27 5 10 19 20 2 21 9 2 19 3 26 15 18 3 14 3 6 14 18 17 15 13 5 14 14 9 10 27 5 2 25 4 9 1 4 17 20 25 26 3 18 10 19 11 6 13 23 19 26 20 10 11 16 7 18 22 17 13 21 15 26 13 9 21 9 4 22 4 8 13 2 6 4 15 3 10 12 11 13 10 22 20 9 25 4 7 7 26 3 23 27 23 26 5 16 5 26 11 25 27 17 24 6 18 9 19 2 1 13 23 13 22 20 3 27 16 26 27 2 8 11 18 1 22 20 10 17 19 2 16 4 16 27 3 14 17 19 28 10 7 6 11 19 9 12 14 13 2 3 14 7 2 15 4 16 14 7 14 6 15 7 9 3 18 12 19 6 16 10 17 6 13 3 2 8 15 9 14 13 17 11 5 10 3 8 12 7 4 5 14 16 18 19 2 25 35 25 2 16 5 23 13 13 9 3 15 12 24 2 16 8 21 5 22 19 22 18 1 5 8 3 13 15 7 22 11 19 18 4 14 24 5 24 6 17 2 22 12 14 25 13 17 13 6 21 17 19 3 16 21 12 14 19 10 6 17 5 20 9 16 17 8 15 12 8 10 18 32 7 13 4 18 16 9 17 2 6 2 2 13 14 3 9 8 1 17 18 10 6 17 4 7 14 18 15 14 9 5 1 15 15 11 3 9 15 17 4 15 18 3 3 5 16 5 16 4 3 2 5 7 10 14 12 2 12 6 13 4 9 17 5 1 3 2 2 3 1 2 0 0 32 59 6 9 29 25 24 31 32 3 5 22 14 11 30 26 22 31 12 21 30 4 27 14 17 8 8 19 27 11 8 3 30 2 20 17 20 16 16 9 5 4 24 15 31 28 19 30 4 16 10 21 31 6 14 30 20 24 9 24 26 18 25 14 24 28 16 2 27 3 12 5 15 22 32 22 2 17 31 3 23 9 24 23 13 7 27 29 23 19 27 10 5 3 23 1 31 21 9 27 26 14 28 25 30 16 17 28 30 31 5 6 15 21 28 26 18 30 21 30 21 99 19 20 13 17 9 19 17 3 6 9 13 10 12 2 21 20 11 18 18 2 21 10 18 14 4 6 3 6 20 13 13 11 17 21 9 3 20 1 16 14 1 13 7 14 1 2 16 10 2 9 14 11 19 6 6 7 19 15 9 7 9 5 13 7 14 15 4 9 19 3 15 5 12 3 17 5 15 10 9 15 2 15 16 15 8 19 19 12 10 14 12 15 13 18 20 7 13 9 5 14 5 3 20 3 2 7 1 9 13 12 11 5 6 14 17 12 10 9 10 2 16 4 18 6 10 5 19 18 4 3 18 20 14 17 19 10 2 20 18 3 4 12 9 14 11 21 11 15 21 13 8 20 14 20 21 8 15 20 19 14 16 6 12 5 8 11 12 9 17 7 13 6 2 13 18 16 5 6 2 8 8 17 8 1 6 12 17 4 7 12 10 8 2 5 18 15 19 21 0 0
Sample Output
2 2 1 3 1 1 3 2 7 1 1 4 5 5 7 8 5 1