#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <cmath>
using namespace std;
#define M 5000
#define N 50000
#define P 1
struct Point{
int x;
int y;
};
//void mulMatri(int A[M][P],int B[P][N],int C[M][N],int m,int n,int p);
inline void mulMatri(Point** A,Point** B,float** C,int m,int n,int p);
int main()
{
int i,j;
Point** A,**B;
float **C;
A=(Point**)malloc(M*sizeof(Point *));
B=(Point**)malloc(P*sizeof(Point *));
C=(float**)malloc(M*sizeof(float *));
for(i=0;i<M;i++)
A[i]=(Point*)malloc(P*sizeof(Point));
for(i=0;i<P;i++)
B[i]=(Point*)malloc(N*sizeof(Point));
for(i=0;i<M;i++)
C[i]=(float*)malloc(N*sizeof(float));
//int A[M][P],B[P][N],C[M][N];
for(i=0;i<M;i++)
for(j=0;j<P;j++)
{
A[i][j].x=rand()%10;
A[i][j].y=rand()%10;
}
for(i=0;i<P;i++)
for(j=0;j<N;j++)
{
B[i][j].x=rand()%10;
B[i][j].y=rand()%10;
}
clock_t start,finish;
start=clock();
mulMatri( A,B,C,M,N,P);
finish=clock();
printf("%f ms\n",(float)(finish-start));
system("pause");
for(i=0;i<M;i++){
for(j=0;j<P;j++)
cout<<"("<<A[i][j].x<<","<<A[i][j].y<<") ";
cout<<endl;
}
for(i=0;i<P;i++){
for(j=0;j<N;j++)
cout<<"("<<B[i][j].x<<","<<B[i][j].y<<") ";
cout<<endl;
}
for(i=0;i<M;i++){
for(j=0;j<N;j++)
cout<<C[i][j]<<" ";
cout<<endl;
}
for(i=0;i<M;i++)
free(A[i]);
for(i=0;i<P;i++)
free(B[i]);
for(i=0;i<M;i++)
free(C[i]);
free(A);
free(B);
free(C);
return 0;
}
//void mulMatri(int A[M][P],int B[P][N],int C[M][N],int m,int n,int p)
inline void mulMatri(Point** A,Point** B,float** C,int m,int n,int p)
{
int i,j,k;
for(i=0;i<m;i++)
{
float min_value,min_idx;
min_value=10;
for(j=0;j<n;j++)
{
for(k=0;k<p;k++)
{
int x=A[i][k].x-B[k][j].x;
int y=A[i][k].y-B[k][j].y;
C[i][j]=sqrt(x*x+y*y);//不要使用pow,太慢
/*if(C[i][j]<min_value)
{
min_value=C[i][j];
min_idx=j;
}*/
}
}
//cout<<"person="<<i<<" "<<"car="<<min_idx<<endl;
}
}
二维矩阵实现的多人多车求距离
最新推荐文章于 2021-04-27 16:06:59 发布