Algorithm 如何从用户的联系人中找到“可能的朋友”
假设我有一些用户的联系人,比如手机中的联系人。在联系人中,用户会有他们朋友的联系人信息,比如电话号码。不算大,我们可以假设它小于1000 如果在A的联系人中,A有B的联系信息,我们说A和B是朋友,虽然B没有AAlgorithm 如何从用户的联系人中找到“可能的朋友”,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之间可能的路径
现在,我们考虑如果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没有共同的朋友,但它们将成为可能的朋友,这有什么不对