AC代码(找与k联通的点最少的那个node, dfs)
Select Code
#include <iostream>
#include <bits/stdc++.h>
#define maxn 0x3f3f3f3f
using namespace std;
int mp[120][120];
int vis[120];
int n, m, k, ans;
void dfs(int x, int b)
{
int i;
for(i = 1;i<=n;i++)
{
if(mp[x][i]==1&&vis[i]==0&&i!=b)
{
vis[i] = 1;
ans++;
dfs(i, b);
vis[i] = 0;
}
}
}
int main()
{
std::ios::sync_with_stdio(false);
int i;
while(cin>>n&&n)
{
memset(mp, 0, sizeof(mp));
memset(vis, 0, sizeof(vis));
cin>>k>>m;
int u, v;
for(i = 0;i<m;i++)
{
cin>>u>>v;
mp[u][v] = mp[v][u] = 1;
}
int mini = maxn, temp;
for(i = 1;i<=n;i++)
{
ans = 0;
if(i!=k)
{
dfs(k, i);
if(ans<mini)
{
mini = ans;
temp = i;
}
}
}
printf("%d\n",temp);
}
return 0;
}