题目
给出一个连通无向图,求最多能删掉多少条边后还是连通图。
输入
4(顶点数) 6(边数)
1 2 (表示一条点1到点2的线)
1 3
1 4
2 3
2 4
3 4
输出
3
dfs解题思路
这道题其实不用dfs更简单,但是毕竟例题还是用一下吧。
首先我们如果到达一个点便标记一下,等到下一次在到这个点时就可以确定这条线是不需要的(因为有其他的方法可以到达)
dfs代码
#include<cstdio>
using namespace std;
int walk[101],a[101][101],x,y,n,m,s;
void dfs(int x)
{walk[x]=true;//标记已有方法可以到达for (int i=1;i<=n;i++){if (a[x][i]==true && i!=x)//如果可以到达{a[x][i]=false;a[i][x]=false;//标记为已经搜过if (walk[i]) s++;//如果有方法可以到达就删掉这条边else dfs(i);//不然就搜索}}
}
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){scanf("%d%d",&x,&y);a[x][y]=true;a[y][x]=true;//表示两点连通}dfs(1);//搜索printf("%d",s);//输出
}
其他解题思路
其实根据推理,输出6-4+1(m-n+1)就可以的