यह जाँचना कि 2D मैट्रिक्स सममित है या नहीं, कार्य YES को आउटपुट करना है यदि मैट्रिक्स सममित है तो आउटपुट NO।

मुझे अपेक्षित परिणाम नहीं मिल रहा है। क्या कोई मेरी मदद कर सकता है और कृपया मुझे बताएं कि इस कोड में क्या गलत है?

#include<iostream>
#include<vector>
using namespace std;
bool rev(int n)
{
int n1,d,rn=0;
n1=n;
while(n>0)
{
        d=n%10;
    rn=(rn*10)+d;
    n/=10;
}
if(n1==rn)
{return true;}
else
return false;
 }
 bool XAxisSymCheck(vector<int> vect)
 {
      // Declaring iterator to a vector 
    vector<int>::iterator ptr; 
    for (ptr = vect.begin(); ptr < vect.end(); ptr++) 
     { if(!rev(*ptr)) // reversing the elements in each element of vector to check whether its symmetric or not .. similar to palindrome
         {
            return false;
         }
     }
  }
  int main()
  {int testcase;
  cin>>testcase;
  for(int k=0;k<testcase;++k)
  {vector<int> rows;
  bool IsSymmetric=true;
  int row;
    cin >> row;
    // read each row and append to the "rows" vector
    for (int r = 0; r < row; r++)
    {
        int line;
        cin >> line;
        rows.push_back(line);
    }
   if(XAxisSymCheck(rows))
   {int i,j;
   i=0;
   j=row-1;
   while(i<j) // looping through the elements of vector and checking the first element with last element , second element with the second last element and so on.
    {
     if(rows[i]!=rows[j])
       {
         IsSymmetric=false;
         break;
       }
     i++;
     j--;
    }
   }
   else
    {
     IsSymmetric=false;
    }   
    cout << (IsSymmetric ? "Yes" : "No") << endl;
 }  
return 0;
}

इनपुट: पहली पंक्ति में टी - परीक्षण मामलों की संख्या है। टी परीक्षण के मामलों का पालन करें। प्रत्येक परीक्षण मामले की पहली पंक्ति में मैट्रिक्स का N - आकार होता है। अगली N लाइनों में लंबाई N के बाइनरी स्ट्रिंग्स होते हैं।

आउटपुट: प्रत्येक परीक्षण मामले के लिए एक नई पंक्ति में हाँ या नहीं प्रिंट करें

SAMPLE INPUT 
5
2
11
11
4
0101
0110
0110
0101
4
1001
0000
0000
1001
5
01110
01010
10001
01010
01110
5
00100
01010
10001
01010
01110

SAMPLE OUTPUT 
YES
NO
YES
YES
NO

Test Case #1: Symmetric about both axes, so YES.

Test Case #2: Symmetric about X-axis but not symmetric about Y-axis, so NO.

Test Case #3: Symmetric about both axes, so YES.

Test Case #4 and #5 are explained in statement.
0
Debabrata Ponda 20 अप्रैल 2019, 17:05

1 उत्तर

सबसे बढ़िया उत्तर

आपके कोड में तीन समस्याएं हैं

1) आप कभी भी true से XAxisSymCheck वापस नहीं आ रहे हैं (यह संकलक चेतावनियों का निरीक्षण करके आसानी से खोजा जा सकता है, उदाहरण के लिए g++ -Wall matrix.cpp)

bool XAxisSymCheck(vector<int> vect) {
    vector<int>::iterator ptr; 
    for (ptr = vect.begin(); ptr < vect.end(); ptr++) { 
        if(!rev(*ptr, vect.size()))
            return false;

    }
    return true;
}

2) जब आपका XAxisSymCheck विफल हो जाता है, तो आप IsSymmetric को false पर सेट नहीं कर रहे हैं (संपादन से पहले मूल पोस्ट में कम से कम)

for(int k=0;k<testcase;++k) {
    vector<int> rows;
    bool IsSymmetric = true;

    // ....

    if (XAsxisSymCheck(rows)) {
       // ...
    } else {
        IsSymmetric = false;
    }

    cout << (IsSymmetric ? "Yes" : "No") << endl;
}

3) आपका रिवर्स चेक विफल हो जाता है, यदि किसी लाइन में अग्रणी शून्य है, क्योंकि रिवर्स को अक्सर 10 से गुणा नहीं किया जाता है।

bool rev(int n,int len) {
    int n1,d,rn=0;
    n1=n;
    for (int i = 0; i < len; i++)
    {
        d=n%10;
        rn=(rn*10)+d;
        n/=10;
    }
    return n1==rn;
}
1
derpirscher 20 अप्रैल 2019, 15:01