I have a n×n matrix;
All elements of this matrix is 0;
I want to fill this matrix with n numbers of 1;
One state for n=4 is below:
0 1 0 0
1 0 0 0
0 0 0 1
0 0 1 0
How can I have all states such that in any rows
or columns just one number of 1 would have existed.
I work with visual basic 2o17 and want to do this with one library(iostream).
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <chrono>
#include <random>
usingnamespace std;
int main()
{
int N = 4;
vector<vector<int>> matrix( N, vector<int>( N, 0 ) ); // Initialise matrix to 0
vector<int> choice( N );
for ( int i = 0; i < N; i++ ) choice[i] = i; // choice[i] will hold the non-zero column in the ith row
unsigned seed = chrono::system_clock::now().time_since_epoch().count();
shuffle( choice.begin(), choice.end(), default_random_engine( seed ) ); // Give it a shuffle
for ( int i = 0; i < N; i++ ) matrix[i][choice[i]] = 1; // Put the 1s in the matrix
for ( int i = 0; i < N; i++ )
{
for ( int j = 0; j < N; j++ ) cout << setw(2) << matrix[i][j];
cout << '\n';
}
}
But it has repeating operation;
I want to have number of this operation.
I'm not sure that I understand what you are asking, Morapoly.
If you want all 4! = 24 possibilities then use next_permutation on choice, instead of shuffling it. The number of possibilities will go up very rapidly with the size of the matrix, though.