ধরুন আমাদের কাছে ব্যবহারকারীর নাম, ইমেল এবং ফোন নম্বর যে কোনও ক্রমে ধারণ করা পরিচিতিগুলির একটি তালিকা রয়েছে, আমাদের একই পরিচিতিগুলি খুঁজে বের করতে হবে (যখন একই ব্যক্তির অনেকগুলি আলাদা পরিচিতি থাকে) এবং একই পরিচিতিগুলি ফেরত দিতে হবে। একসাথে আমাদের মনে রাখতে হবে যে −
-
একটি পরিচিতি যেকোনো অর্ডার অনুযায়ী ব্যবহারকারীর নাম, ইমেল এবং ফোন ক্ষেত্র সংরক্ষণ করতে পারে।
-
দুটি পরিচিতি একই হয় যদি তাদের হয় একই ব্যবহারকারীর নাম বা একই ইমেল বা একই ফোন নম্বর।
সুতরাং, যদি ইনপুটটি পরিচিতির মত হয় =[{"Amal", "[email protected]", "+915264"},{ "Bimal", "[email protected]", " +1234567"},{ "Amal123", "+1234567", "[email protected]"},{ "AmalAnother", "+962547", "[email protected]"}], তাহলে আউটপুট হবে [ 0,2,3], [1] সূচীতে [0,2,3] পরিচিতিগুলি একই, এবং সূচী 1-এ আরেকটি পরিচিতি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন generate_graph() সংজ্ঞায়িত করুন। এটি cnt, n, ম্যাট্রিক্স
নেবে -
0 থেকে n রেঞ্জের জন্য, করুন
-
0 থেকে n রেঞ্জের মধ্যে j এর জন্য, করুন
-
ম্যাট্রিক্স[i, j] :=0
-
-
-
0 থেকে n রেঞ্জের জন্য, করুন
-
i + 1 থেকে n রেঞ্জে j এর জন্য, করুন
-
যদি cnt[i].slot1 হয় cnt[j].slot1 বা cnt[i].slot1 হয় cnt[j].slot2 orcnt[i].slot1 হয় cnt[j].slot3 বা cnt[ i].slot2 cnt[j].slot1 orcnt[i].slot2 cnt[j].slot2 বা cnt[i].slot2 cnt[j].slot3 orcnt[i].slot3 এর মতই cnt[j].slot1 বা cnt[i].slot3 এর সমান cnt[j].slot2 orcnt[i].slot3 cnt[j].slot3 এর সমান, তারপর
-
ম্যাট্রিক্স[i, j] :=1
-
ম্যাট্রিক্স[j, i] :=1
-
লুপ থেকে বেরিয়ে আসুন
-
-
-
-
একটি ফাংশন সংজ্ঞায়িত করুন visit_using_dfs()। এর জন্য i, matrix, visited, sol, n
লাগবে -
পরিদর্শন [i] :=সত্য
-
sol এর শেষে i ঢোকান
-
0 থেকে n রেঞ্জের মধ্যে j এর জন্য, করুন
-
যদি ম্যাট্রিক্স[i][j] অ-শূন্য হয় এবং পরিদর্শন না করা হয় [j] অ-শূন্য হয়, তাহলে
-
visit_using_dfs(j, matrix, visited, sol, n)
-
-
-
মূল পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
-
n :=cnt এর আকার
-
sol :=একটি নতুন তালিকা
-
ম্যাট্রিক্স :=n x n
আকারের একটি বর্গাকার ম্যাট্রিক্স তৈরি করুন -
visited :=n আকারের একটি অ্যারে তৈরি করুন এবং 0
দিয়ে পূরণ করুন -
generate_graph(cnt, n, matrix)
-
0 থেকে n রেঞ্জের জন্য, করুন
-
যদি পরিদর্শন না করা হয় [i] অ-শূন্য, তাহলে
-
visit_using_dfs(i, matrix, visited, sol, n)
-
sol-এর শেষে -1 সন্নিবেশ করুন
-
-
-
আমি 0 থেকে sol-এর মাপ পরিসীমার জন্য, কর
-
যদি sol[i] -1 এর মত হয়, তাহলে
-
পরবর্তী লাইনে যান
-
-
অন্যথায়,
-
ডিসপ্লে সল[i]
-
-
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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", "[email protected]", "+915264"), contact("Bimal", "[email protected]", "+1234567"), contact("Amal123", "+915264", "[email protected]"), contact("AmalAnother", "+962547", "[email protected]")] get_similar_contacts(cnt)
ইনপুট
cnt = [contact("Amal", "[email protected]", "+915264"), contact("Bimal", "[email protected]", "+1234567"), contact("Amal123", "+915264", "[email protected]"), contact("AmalAnother", "+962547", "[email protected]")]
আউটপুট
0 2 3 1