矩陣操作主要是用在圖論裡面,求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 函式裡建立...