Algorithm 如何从用户的联系人中找到“可能的朋友”

Algorithm 如何从用户的联系人中找到“可能的朋友”,algorithm,graph,graph-algorithm,Algorithm,Graph,Graph Algorithm,假设我有一些用户的联系人,比如手机中的联系人。在联系人中,用户会有他们朋友的联系人信息,比如电话号码。不算大,我们可以假设它小于1000 如果在A的联系人中,A有B的联系信息,我们说A和B是朋友,虽然B没有A 现在,我们考虑如果USER1和USER2有两个以上的普通朋友UsR3和UsR4或者更多,我们可以说USER1和USER2是可能的,Fuxsif USE1和USER2不是朋友。 我们有n个用户的联系人。如何找到所有这些用户可能的朋友 谢谢大家! 如何:获取UserA和UserB之间可能的路径

假设我有一些用户的联系人,比如手机中的联系人。在联系人中,用户会有他们朋友的联系人信息,比如电话号码。不算大,我们可以假设它小于1000

如果在A的联系人中,A有B的联系信息,我们说A和B是朋友,虽然B没有A

现在,我们考虑如果USER1和USER2有两个以上的普通朋友UsR3和UsR4或者更多,我们可以说USER1和USER2是可能的,Fuxsif USE1和USER2不是朋友。 我们有n个用户的联系人。如何找到所有这些用户可能的朋友


谢谢大家!

如何:获取UserA和UserB之间可能的路径数,如果路径数>2,则UserA和UserB可能是朋友

首先,您需要创建图形的邻接矩阵

诸如此类:

//Numbers of edges
int n = 5;

int[][] adjacencymatrix = new int[][] {
    new int[] {1,1,1,0,0}, //    1
    new int[] {1,1,1,1,0}, //  / | \
    new int[] {1,1,1,1,0}, // 0  |  3 - 4
    new int[] {0,1,1,1,1}, //  \ | /
    new int[] {0,0,0,1,1}, //    2
};
然后,还有一些东西

// stock the path
int[] path = new int[n];

// lock for the search (all at false at the beginning)
boolean[] taboo = new boolean[n];

// start and stop edges
int source=0;
int target=4;
最后:

void explore(int position, int depth) {
    path[depth]=position;

    // arrived at stop point -> finished
    if (position==target) {
        // print the solution
        for(int i=0;i<=depth;i++) System.out.print(path[i]+" ");
        System.out.print("\n");
        return;
    }

    taboo[position]=true; // remember you already went on this edge

    // explore remaining paths
    for(int i=0;i<n;i++) {
        if (adjacencymatrix[position][i]==0 || taboo[i]) continue;
        explore(i,depth+1);
    }

    taboo[position]=false;
}
基本上,它所做的就是找到从UserA到UserB的所有唯一路径。 希望这对你有帮助

设G是无向图,其中顶点集是接触点,a,b是边,如果a是b的朋友,即a是b列表中的接触点,或者以其他方式

那么问题就是找到从a到b的两条不同的路径。这些路径可通过以下方式找到:

以 每当您在搜索过程中访问b时,请打印其路径

当程序输出两条路径时停止


问题是,您可能找不到这样的路径,这通常会使问题变得困难

您必须有一个额外的限制-路径的长度必须为1,因为在您的情况下,0和4没有共同的朋友,但它们将成为可能的朋友,这有什么不对