求助dalao矩阵的第4个点错了但感觉没问题
查看原帖
求助dalao矩阵的第4个点错了但感觉没问题
867875
niveKmAI楼主2024/6/7 21:15
#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,y;
}a[805];
int s[805];
int t[805];
int aa;
int b;
int x[805];
int xx[805];
int xxx[805];
int xxxx[805];
int y[805];
int yy[805];
int yyy[805];
int yyyy[805];
double f[805][805];
double dis(int a,int b,int c,int d){
	return sqrt((a-c)*(a-c)+(b-d)*(b-d)); 
}
double diss(int k){
	return sqrt((x[k]-xx[k])*(x[k]-xx[k])+(y[k]-yy[k])*(y[k]-yy[k])); 
} 
double disss(int k){
	return sqrt((x[k]-xxx[k])*(x[k]-xxx[k])+(y[k]-yyy[k])*(y[k]-yyy[k])); 
} 
double dissss(int k){
	return sqrt((xx[k]-xxx[k])*(xx[k]-xxx[k])+(yy[k]-yyy[k])*(yy[k]-yyy[k])); 
} 
void zuo(int k){
    double mx=max(diss(k),max(disss(k),dissss(k)));
    double b;
    double p;
    double o;
    double q;
	if(mx==diss(k)){
		double mix=(x[k]+xx[k])/2;
		double miy=(y[k]+yy[k])/2;
		double kk=(miy-yyy[k])/(mix-xxx[k]);
		b=miy-kk*mix;
		p=(y[k]-yyy[k])/(x[k]-xxx[k]);
		double bb=yy[k]-p*xx[k];
		o=(b-bb)/(p-kk);
		q=kk*o+b;
	} 
	else if(mx==disss(k)){
		double mix=(x[k]+xxx[k])/2;
		double miy=(y[k]+yyy[k])/2;
		double kk=(miy-yy[k])/(mix-xx[k]);
		b=miy-kk*mix;
		p=(y[k]-yy[k])/(x[k]-xx[k]);
		double bb=yyy[k]-p*xxx[k];
		o=(b-bb)/(p-kk);
		q=kk*o+b;
	}
	else{
		double mix=(xx[k]+xxx[k])/2;
		double miy=(yy[k]+yyy[k])/2;
		double kk=(miy-y[k])/(mix-x[k]);
		b=miy-kk*mix;
		p=(y[k]-yyy[k])/(x[k]-xxx[k]);
		double bb=yy[k]-p*xx[k];
		o=(b-bb)/(p-kk);
		q=kk*o+b;
		
	}
	xxxx[k]=o;
	yyyy[k]=q;
} 
void floed(int m,int t){
	for(int i=1; i<=405; i++){
		for(int j=1; j<=405; j++){
			f[i][j]=1e9;
		}
		f[i][i]=0;
	}
	for(int i=1; i<=4*m; i++){
		for(int j=i; j<=4*m; j++){
			f[i][j]=t*dis(a[i].x,a[i].y,a[j].x,a[j].y);
			f[j][i]=t*dis(a[i].x,a[i].y,a[j].x,a[j].y);
		} 
	}
     for(int k=1; k<=4*m; k++){
     	for(int i=1; i<=4*m; i++){
     		for(int j=1; j<=4*m; j++){
     			f[i][j]=min(t*f[i][k]+t*f[k][j],t*f[i][j]);
			 }
		 }
	 }
	 for(int i=1; i<=4*m; i++){
	 	for(int j=1; j<=4*m; j++){
	 		cout<<f[i][j]<<" ";
		 } 
		 cout<<endl;
	 }
}
int main(){
	int n;
	cin>>n;
	int cnt=0;
	for(int i=1; i<=n; i++){
		cin>>s[i]>>t[i]>>aa>>b;
		cnt=0;
		for(int j=1; j<=s[i]; j++){
			cin>>x[j]>>y[j]>>xx[j]>>yy[j]>>xxx[j]>>yyy[j];
			zuo(j);
			cout<<xxxx[j]<<" "<<yyyy[j]<<endl;
			a[++cnt].x=x[j];
			a[cnt].y=y[j];
			a[++cnt].x=xx[j];
			a[cnt].y=yy[j];
			a[++cnt].x=xxx[j];
			a[cnt].y=yyy[j];
			a[++cnt].x=xxxx[j];
			a[cnt].y=yyyy[j];
		}
		floed(s[i],t[i]);
	    double ans=1e9;
		for(int i=aa*4-4; i<=aa*4; i++){
			for(int j=b*4-4; j<=b*4; j++){
				ans=min(f[i][j],ans);
			}
		}
	    printf("%.1lf",ans);
	} 
	return 0;
}
2024/6/7 21:15
加载中...