Posted on by Kalkicode
Code Matrix

Anticlockwise spiral view of diamond matrix elements in c++

Anticlockwise spiral view of matrix

C++ program for Anticlockwise spiral view of diamond matrix elements. Here more solutions.

// Include header file
#include <iostream>
#include <vector>
using namespace std;
/*
  C++ program for
  Anticlockwise spiral view of diamond element in matrix
*/
class SpiralTraversal
{
	public:
		// Method which is displaying the Anticlockwise spiral 
		// Of matrix in diamond(mid) element
		void spiralView(vector < vector < int >> matrix, 
                        int x, int y, int p, int q, int k)
		{
			// Find the middle column
			int mid_col = y + ((q - y) / 2);
			// Get middle row (valid for odd square matrix)
			int mid_row = mid_col;
			// Matrix are divided into 4 section
			// Starting of middle row and column in form of top
			// Case A
			// Top to Left-bottom
			int i = mid_col;
			int j = 0;
			while (i > y && k > 0)
			{
				cout << "  " << matrix[x + j][i];
				i--;
				k--;
				j++;
			}
			// Case B
			// Middle left to middle right bottom
			i = y;
			j = 0;
			while (i <= mid_col && k > 0)
			{
				cout << "  " << matrix[(mid_row) + j][i];
				i++;
				k--;
				j++;
			}
			// Case C
			// Middle bottom to middle right side 
			i = mid_col + 1;
			j = 1;
			while (i <= q && k > 0)
			{
				cout << "  " << matrix[(p) - j][i];
				i++;
				k--;
				j++;
			}
			// Case D
			// Middle right side to  top middle 
			i = q - 1;
			j = 1;
			while (i > mid_col && k > 0)
			{
				cout << "  " << matrix[(mid_row) - j][i];
				i--;
				k--;
				j++;
			}
			if (x + 1 <= p - 1 && k > 0)
			{
				// Recursive call
				this->spiralView(matrix, x + 1, y + 1, p - 1, q - 1, k);
			}
		}
	void diamondAnticlockwise(vector < vector < int >> matrix)
	{
		int row = matrix.size();
		int col = matrix[0].size();
		// Check whether the given matrix is a valid odd shape or not
		if (row != col || col % 2 == 0)
		{
			// When Yes not a valid size
			cout << "\nNot a valid perfect Odd square matrix" << endl;
			return;
		}
		// (row*col)-((col+1)/2)*4 are provide the value of number of 
		// Diamond element
		this->spiralView(matrix, 0, 0, row - 1, 
             col - 1, (row *col) - ((col + 1) / 2) *4);
	}
};
int main()
{
	SpiralTraversal *task = new SpiralTraversal();
	// Define matrix 
	vector < vector < int >> matrix {
      {1,  2,  3,  4,  5},
      {6,  7,  8,  9,  10},
      {11, 12, -1, 15,  16},
      {17, 18, 19, 20,  21},
      {22, 23, 24, 25,  26}
    }; 
	task->diamondAnticlockwise(matrix);
	return 0;
}

Output

  3  7  11  18  24  20  16  9  8  12  19  15  -1

Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment