给出n个人和m次通话, 如果两个人(间接或直接)通话,那么则称这两人在一个电话圈中,求出所有电话圈.
思路:在有向图中,如果我们不关心路径长度,思考任意两点间是否有通路,则将边权1代表通路,0代表没有路.
d[i][j]=d[i][j]||(d[i][k]&&d[k][j]) 这样就求出任意两点间是否有通路。这个结果称为有向图的传递闭包.
实现: 读入的名字用取ID函数给一个ID作为起点,然后有路就是边权1,没有就是0,自己到自己边权是1.
代码;别忘了vector输出字符串要用那个name[i].c_str()
#include
#include
#include
#include
#include
#define INF 999
using namespace std;
vector names; int n,m;int g[26][26];int vis[26];
int ID(const string &s){
for(int i=0;i
关注
打赏