কম্পিউটার

C++ এ একটি 2-সারি বাইনারি ম্যাট্রিক্স পুনর্গঠন করুন


ধরুন আমাদের কাছে n কলাম এবং 2টি সারি সহ একটি ম্যাট্রিক্সের নিম্নলিখিত বিবরণ রয়েছে -

  • ম্যাট্রিক্স উপাদান 0 বা 1 হবে
  • 0-তম ​​(উপরের) সারির উপাদানগুলির যোগফল উপরের হিসাবে দেওয়া হয়েছে।
  • 1-ম(নিম্ন) সারির উপাদানগুলির যোগফল নিম্ন হিসাবে দেওয়া হয়েছে।
  • i-তম কলামে উপাদানের যোগফল (0-সূচিবদ্ধ) হল colsum[i], যেখানে colsum দৈর্ঘ্য n সহ একটি পূর্ণসংখ্যা অ্যারে হিসাবে দেওয়া হয়।

কাজটি হল ম্যাট্রিক্সকে আপার, লোয়ার এবং কলসাম দিয়ে পুনর্গঠন করা। আমরা একটি 2D পূর্ণসংখ্যা অ্যারে হিসাবে এটি খুঁজে পেতে হবে. যদি একাধিক বৈধ সমাধান থাকে, তবে তাদের যেকোনো একটি গ্রহণ করা হবে। কোন বৈধ সমাধান না থাকলে, একটি খালি 2D অ্যারে ফেরত দিন। সুতরাং ইনপুট যদি উপরের =2, নিম্ন =3 এবং কলসাম হয় [1,1,1], তাহলে আউটপুট হবে [[1,1,0],[0,0,1]]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • পতাকা সেট করুন :=সত্য, n :=c এর আকার, অর্ডার 2 * n এর একটি অ্যারে উত্তর তৈরি করুন
  • আমি 0 থেকে n
      পরিসরে
    • যদি c[i] =2, তাহলে
      • u এবং l 1 দ্বারা কমান
      • যদি u <0 বা l <0 হয়, তাহলে ফ্ল্যাগ করুন :=মিথ্যা
      • ans[0, i] =1 এবং ans[1, i] =1 দিন
    • অন্যথায় যদি c[i] =1 হয়, তাহলে
      • যদি u> l, তাহলে u 1 কমিয়ে আন, ans[0, i] :=1
      • অন্যথায় যখন u
      • অন্যথায় যখন c[i] =1
      • যদি u> 0 হয়, তাহলে u কমিয়ে 1 এবং ans[0, i] :=1
      • অন্যথায় l> 0, তারপর l কমিয়ে 1 এবং ans[1, i] :=1
      • অন্যথায় পতাকা সেট করুন :=মিথ্যা
    • অন্যথায় c[i] =0
      • যদি c[i]> 0 হয়, তাহলে পতাকা সেট করুন :=false
    • অন্যথায় পতাকা সেট করুন :=মিথ্যা
  • যদি পতাকা মিথ্যা হয় বা u 0 না হয় বা l 0 না হয়, তাহলে খালি ফিরে যান
  • উত্তর ফেরত দিন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include  namespace ব্যবহার করে std;void print_vector(vector> v){ cout <<"["; for(int i =0; i> পুনর্গঠন ম্যাট্রিক্স(int u, int l, vector&c) { bool flag =true; int n =c.size(); ভেক্টর <ভেক্টর > ans(2, ভেক্টর  (n)); for(int i =0; i l){ u--; উত্তর[0][i] =1; }অন্যথায় যদি(u0){ u--; উত্তর[0][i] =1; }অন্যথায় যদি(l> 0){ l--; উত্তর[1][i] =1; অন্য পতাকা =মিথ্যা; } } অন্যথায় যদি(c[i] ==0){ if(c[i]>0)পতাকা =মিথ্যা; }অন্য{ পতাকা =মিথ্যা; } } যদি(!পতাকা || u!=0 ||l!=0 )রিটার্ন {}; উত্তর দিন; }};প্রধান(){ ভেক্টর v ={1,1,1}; সমাধান ob; print_vector(ob.reconstructMatrix(2,1,v));}

ইনপুট

21[1,1,1] 

আউটপুট

<প্রে>[[1, 1, 0, ],[0, 0, 1, ],]
  1. C++ এ বাইনারি ম্যাট্রিক্সকে জিরো ম্যাট্রিক্সে রূপান্তর করতে ফ্লিপের ন্যূনতম সংখ্যা

  2. C++ এ বাইনারি ট্রি প্রিন্ট করুন

  3. C++ এ বাইনারি ট্রি প্রুনিং

  4. একটি ম্যাট্রিক্স বাইনারি ম্যাট্রিক্স নাকি C++ এ নয় তা পরীক্ষা করার জন্য প্রোগ্রাম