public class Matrix
{
private int[][] arr;
private int n;
public Matrix(int n)
{
this.n = n;
this.arr = new int[n][n];
}
public Matrix(int[][] arr)
{
this.arr = arr;
this.n = arr.length;
}
public Matrix assign(Matrix a)
{
Matrix b = new Matrix(a.getN());
for (int i = 0; i<n; i++)
{
for (int j = 0; j<n; j++)
{
b.arr[i][j] = a.arr[i][j];
}
}
return b;
}
public Matrix plus(Matrix b)
{
Matrix a = this;
Matrix c = new Matrix(a.getN());
for (int i = 0; i < a.getN(); i++)
{
for (int j = 0; j < a.getN(); j++)
{
if ((a.arr[i][j] == 1) || (b.arr[i][j] == 1))
c.arr[i][j] = 1;
else
c.arr[i][j] = 0;
//c.arr[i][j] = a.arr[i][j] + b.arr[i][j];
}
}
return c;
}
public Matrix mul(Matrix a, Matrix b)
{
Matrix c = new Matrix(a.getN());
for (int i = 0; i<a.getN(); i++)
for (int j = 0; j<a.getN(); j++)
c.arr[i][j] = 0;
for (int i = 0; i < a.getN(); i++)
{
for (int j = 0; j < a.getN(); j++)
{
for (int k = 0; k < a.getN(); k++)
{
c.arr[i][j] += (a.arr[i][k] * b.arr[k][j]);
}
if (c.arr[i][j]>0)
c.arr[i][j] = 1;
}
}
return c;
}
public Matrix pathway(Matrix a)
{
Matrix temp, mat, p;
temp = new Matrix(a.getN());
mat = new Matrix(a.getN());
p = new Matrix(a.getN());
temp.assign(a);
p.assign(a);
for (int i = 0; i<a.getN()-1; i++)
{
mat.equals(mul(temp, a));
p.equals(plus(mat));
mat.assign(temp);
}
return p;
}
public int[][] getArr() {
return arr;
}
public void setArr(int[][] arr) {
this.arr = arr;
}
public int getN() {
return n;
}
public void setN(int n) {
this.n = n;
}
}