矩陣操作(5)

2021-06-18 02:12:54 字數 1439 閱讀 6827

矩陣操作主要是用在圖論裡面,求k步的方案或者最短路

hdu2157

/***********************

題意:給定乙個有向圖,問從a點恰好走k步(允許重複經過邊)到達b點的方案數mod p的值

思路:把給定的圖轉為鄰接矩陣,即a(i,j)=1 當且僅當存在一條邊i->j 。令c=a*a,那麼

c(i,j)=σ a(i,k)*a(k,j),實際上就等於從點i 到點j 恰好經過 2 條邊的路徑數(列舉k 為中轉點)。

類似地,c*a 的第i 行第j 列就表示從i 到j 經過3 條邊的路徑數。同理,如果要求經過k步的路

數,我們只需要二分求出a^k即可。

************************/

#include#include#include#define mod 1000

using namespace std;

struct matrix

matrix operator +(const matrix &b)const

return ans;

}int a,b;

int x,y;

int t;

int k;

matrix map,map2,ans;

int main()

經過k條邊的最短路,那麼我們只需要把這個**重複執行k次

注意儲存邊的鄰接矩陣map.edge[i][i]不能初始化為0,為0時每次floyd都會考慮走i--->i這條邊,實際上這條邊是不存在的

*******************/

#include#include#include#include#include#include#define inf 0x3f3f3f3f

using namespace std;

struct matrix

map;

int n;

matrix mul(matrix a,matrix b)}}

return c;

}matrix pow(int k)

while(k)

map=mul(map,map);

k>>=1;

}return c;

}int n,t,s,e;

int len,x,y;

int f[1001];

int num;

matrix c;

int main()

{ //freopen("c:\\users\\administrator\\desktop\\in.txt" , "r" , stdin);

while(~scanf("%d%d%d%d",&n,&t,&s,&e))

{memset(map.a,inf,sizeof(map.a));

memset(f,-1,sizeof(f));

num=0;

for(int i=0; i

5X5矩陣調換!

將乙個5x5矩陣中最大的元素放在中心,4個角分別放4個最小的元素,寫一函式實現之!include int main printf n return 0 void change int p temp p 12 p 12 pmax pmax temp temp p p pmin pmin temp pm...

Opencv矩陣操作

opencv 矩陣操作 cvmat 2009 06 08 20 10 分配矩陣空間 cvmat cvcreatemat int rows,int cols,int type type 矩陣元素型別.格式為cv s u f c.例如 cv 8uc1 表示8位無符號單通道矩陣,cv 32sc2表示32位...

bug opencv 矩陣操作

下午在求homography的a矩陣。程式功能 建立cvmat 賦值然後將mat列印出來。實現方法 cvcreatmat 建立矩陣 cvmat 給矩陣賦值 cvgetreal2d 提取矩陣元素,並列印 總結 整個過程不難,但是遇到乙個bug始終沒有搞明白。我在 cvmat getmata 函式裡建立...