# Check if a grid can become row-wise and column-wise sorted after adjacent swaps

Given a grid of size n x len filled with lowercase characters. We can swap two adjacent characters in the same row and column. Now we have to check whether it is possible to arrange in such a order that every row and every column in the grid is lexicographically sorted.

Examples:

```Input : abcde
fghij
olmkn
trpqs
xywuv
Output : Yes
Explanation :
The grid can be rearranged as
abcde
fghij
klmno
pqrst
uvwxy
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

The idea to do the above problem is really simple we can simply sort the characters in the same row and then just
check column vise if the new grid is sorted column vise or not. Please not that sorting is possible with adjacent swaps (Bubble sort for example does only adjacent swaps)

The implementation of the above idea is given below.

## C++

 `// C++ program to check if we can make a ` `// grid of character sorted using adjacent ` `// swaps. ` `#include ` `using` `namespace` `std; ` ` `  `// v[] is vector of strings. len is length ` `// of strings in every row. ` `bool` `check(vector v, ``int` `len) ` `{ ` `    ``int` `n = v.size(); ` `    ``for` `(``int` `i = 0; i < n; i++)  ` `        ``sort(v[i].begin(), v[i].end()); ` `     `  `    ``for` `(``int` `i = 0; i < len-1; i++)  ` `        ``for` `(``int` `j = 0; j < n; j++)  ` `            ``if` `(v[i][j] > v[i+1][j]) ` `                ``return` `false``; ` `    ``return` `true``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``vector v = { ``"ebcda"``, ``"ihgfj"``, ``"klmno"``,  ` `                               ``"pqrst"``, ``"yvwxu"` `}; ` `    ``int` `len = 5; ``// Length of strings ` `    ``check(v, len)? cout << ``"Yes"` `: cout << ``"No"``; ` `    ``return` `0; ` `} `

## Java

 `// Java program to check if we can make a grid ` `// of character sorted using adjacent swaps. ` `import` `java.util.Arrays; ` ` `  `class` `GfG ` `{ ` ` `  `    ``// v[] is vector of strings. len is ` `    ``// length of strings in every row. ` `    ``static` `boolean` `check(String[] v, ``int` `len) ` `    ``{ ` `        ``int` `n = v.length; ` `        ``char``[] tempArray; ` `         `  `        ``for` `(``int` `i = ``0``; i < n; i++) ` `        ``{ ` `            ``tempArray = v[i].toCharArray(); ` `            ``Arrays.sort(tempArray); ` `            ``v[i] = ``new` `String(tempArray); ` `        ``} ` `         `  `        ``for` `(``int` `i = ``0``; i < len-``1``; i++)  ` `            ``for` `(``int` `j = ``0``; j < n; j++)  ` `                ``if` `(v[i].charAt(j) > v[i+``1``].charAt(j)) ` `                    ``return` `false``; ` `        ``return` `true``; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String []args) ` `    ``{ ` `         `  `        ``String[] v = { ``"ebcda"``, ``"ihgfj"``, ``"klmno"``,  ` `                            ``"pqrst"``, ``"yvwxu"` `}; ` `         `  `        ``int` `len = ``5``; ``// Length of strings ` `        ``if` `(check(v, len)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by Rituraj Jain `

## Python

 `# Python program to check if we can make a ` `# grid of character sorted using adjacent ` `# swaps. ` ` `  `# v[] is vector of strings. len is length ` `# of strings in every row. ` `def` `check(v, l): ` `    ``n ``=` `len``(v) ` `    ``for` `i ``in` `v: ` `        ``i ``=` `''.join(``sorted``(i)) ` `      `  `    ``for` `i ``in` `range``(l ``-` `1``): ` `        ``for` `j ``in` `range``(n): ` `            ``if` `(v[i][j] > v[i ``+` `1``][j]): ` `                ``return` `False` `    ``return` `True` `  `  `# Driver code ` `v ``=` `[ ``"ebcda"``, ``"ihgfj"``, ``"klmno"``, ``"pqrst"``, ``"yvwxu"` `] ` `l ``=` `5` `# Length of strings ` `if` `check(v, l): ` `    ``print` `"Yes"` `else``: ` `    ``print` `"No"` ` `  `# This code is contributed by Sachin Bisht `

## C#

 `// C# program to check if we can make a grid  ` `// of character sorted using adjacent swaps. ` `using` `System; ` ` `  `class` `GfG  ` `{  ` ` `  `    ``// v[] is vector of strings. len is  ` `    ``// length of strings in every row.  ` `    ``static` `Boolean check(String[] v, ``int` `len)  ` `    ``{  ` `        ``int` `n = v.Length;  ` `        ``char``[] tempArray;  ` `         `  `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{  ` `            ``tempArray = v[i].ToCharArray();  ` `            ``Array.Sort(tempArray);  ` `            ``v[i] = ``new` `String(tempArray);  ` `        ``}  ` `         `  `        ``for` `(``int` `i = 0; i < len-1; i++)  ` `            ``for` `(``int` `j = 0; j < n; j++)  ` `                ``if` `(v[i][j] > v[i+1][j])  ` `                    ``return` `false``;  ` `        ``return` `true``;  ` `    ``}  ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `Main(String []args)  ` `    ``{  ` `         `  `        ``String[] v = { ``"ebcda"``, ``"ihgfj"``, ``"klmno"``,  ` `                            ``"pqrst"``, ``"yvwxu"` `};  ` `         `  `        ``int` `len = 5; ``// Length of strings  ` `        ``if` `(check(v, len))  ` `            ``Console.WriteLine(``"Yes"``);  ` `        ``else` `            ``Console.WriteLine(``"No"``);  ` `    ``}  ` `}  ` ` `  `// This code has been contributed by 29AjayKumar `

Output:

```Yes
```

This article is contributed by Sarthak Kohli. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Improved By : rituraj_jain, 29AjayKumar

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.