假设我们有一个以任意顺序保存用户名,电子邮件和号码的联系人列表,我们必须找到相同的联系人(当同一个人有许多不同的联系人时),并将相同的联系人一起返回。我们必须记住-
联系人可以根据任何顺序存储用户名,电子邮件和电话字段。
如果两个联系人具有相同的用户名,相同的电子邮件或相同的号码,则它们是相同的。
因此,如果输入类似于Contacts = [{“ Amal”,“ amal@gmail.com”,“ +915264”},{“ Bimal”,“ bimal321@yahoo.com”,“ +1234567”},{“ Amal123”,“ + 1234567”,“ amal_new@gmail.com”},{“ AmalAnother”,“ + 962547”,“ amal_new@gmail.com”}],则输出为[0,2,3], [1]与索引为[0,2,3]的联系人相同,而另一个索引为1的联系人。
为了解决这个问题,我们将遵循以下步骤-
定义一个函数generate_graph()。这将需要cnt,n,矩阵
对于0到n范围内的i,执行
矩阵[i,j]:= 0
对于0到n范围内的j,执行
对于0到n范围内的i,执行
如果cnt [i] .slot1与cnt [j] .slot1或cnt [i] .slot1与cnt [j] .slot2或cnt [i] .slot1与cnt [j] .slot3或cnt相同[i] .slot2与cnt [j] .slot1或cnt [i] .slot2与cnt [j] .slot2或cnt [i] .slot2与cnt [j] .slot3或cnt [i ] .slot3与cnt [j] .slot1或cnt [i] .slot3与cnt [j] .slot2或cnt [i] .slot3与cnt [j] .slot3相同,然后
矩阵[i,j]:= 1
矩阵[j,i]:= 1
从循环中出来
对于范围i +1至n的j,执行
定义一个函数visit_using_dfs()。这将需要i,矩阵,已访问,sol,n
访问过[i]:=正确
在sol的末尾插入i
对于0到n范围内的j,执行
visit_using_dfs(j,矩阵,访问,sol,n)
如果matrix [i] [j]为非零且未访问过的[j]为非零,则
从主要方法中,执行以下操作-
n:= cnt的大小
sol:=一个新列表
矩阵:=制作大小为nxn的方阵
visit:=制作大小为n的数组,并填充0
generate_graph(cnt,n,矩阵)
对于0到n范围内的i,执行
visit_using_dfs(i,矩阵,访问,sol,n)
在sol的末尾插入-1
如果未访问[i]为非零,则
对于0到sol大小范围内的i
显示溶胶[i]
转到下一行
如果sol [i]与-1相同,则
除此以外,
让我们看下面的实现以更好地理解-
class contact: def __init__(self, slot1, slot2, slot3): self.slot1 = slot1 self.slot2 = slot2 self.slot3 = slot3 def generate_graph(cnt, n, matrix): for i in range(n): for j in range(n): matrix[i][j] = 0 for i in range(n): for j in range(i + 1, n): if (cnt[i].slot1 == cnt[j].slot1 or cnt[i].slot1 == cnt[j].slot2 or cnt[i].slot1 == cnt[j].slot3 or cnt[i].slot2 == cnt[j].slot1 or cnt[i].slot2 == cnt[j].slot2 or cnt[i].slot2 == cnt[j].slot3 or cnt[i].slot3 == cnt[j].slot1 or cnt[i].slot3 == cnt[j].slot2 or cnt[i].slot3 == cnt[j].slot3): matrix[i][j] = 1 matrix[j][i] = 1 break def visit_using_dfs(i, matrix, visited, sol, n): visited[i] = True sol.append(i) for j in range(n): if (matrix[i][j] and not visited[j]): visit_using_dfs(j, matrix, visited, sol, n) def get_similar_contacts(cnt): n = len(cnt) sol = [] matrix = [[None] * n for i in range(n)] visited = [0] * n generate_graph(cnt, n, matrix) for i in range(n): if (not visited[i]): visit_using_dfs(i, matrix, visited, sol, n) sol.append(-1) for i in range(len(sol)): if (sol[i] == -1): print() else: print(sol[i], end = " ") cnt = [contact("Amal", "amal@gmail.com", "+915264"), contact("Bimal", "bimal321@yahoo.com", "+1234567"), contact("Amal123", "+915264", "amal_new@gmail.com"), contact("AmalAnother", "+962547", "amal_new@gmail.com")] get_similar_contacts(cnt)
cnt = [contact("Amal", "amal@gmail.com", "+915264"), contact("Bimal", "bimal321@yahoo.com", "+1234567"), contact("Amal123", "+915264", "amal_new@gmail.com"), contact("AmalAnother", "+962547", "amal_new@gmail.com")]
输出结果
0 2 3 1