封装一个矩阵,带乘法,加法和清空

struct matrix
{
	int n,m;
	long long a[N][N];
	friend matrix operator * (matrix x,matrix y)
    {
        matrix c;
        c.n=x.n;c.m=y.m;
        c.clear(0);
        for(int i=1;i<=c.n;++i)
        {
            for(int j=1;j<=x.m;++j)
            {
            	if(x.a[i][j])
                for(int k=1;k<=c.m;++k)
                {
                	if(y.a[j][k])
                	c.a[i][k]=(c.a[i][k]+1ll*x.a[i][j]*y.a[j][k]%YA)%YA;
                }
            }
        }
        return c;
    }
	friend matrix operator + (matrix x,matrix y)
	{	
		matrix c;
		c.n=x.n;c.m=y.m;
		c.clear(0);
		for(int i=1;i<=c.n;++i)
		{
			for(int j=1;j<=c.m;++j)
			{
				c.a[i][j]=(c.a[i][j]+(x.a[i][j]+y.a[i][j])%YA)%YA;
			}
		}
		return c;
	}
	inline void clear(bool f)
	{
		for(int i=1;i<=n;++i)
		{
			for(int j=1;j<=m;++j)
			{
				a[i][j]=0;
				if(i==j&&f) a[i][j]=1;
			}
		}
		return;
	}
};

对于邻接矩阵

记矩阵A为一个边权均为1的一张图的邻接矩阵, 那么${A^n_{i,j}}$表示图中i点到j点距离为n的路径条数