2021-1-6
线性分类器改进,用大于0和小于0表示在直线的两侧。
在知乎上可以搜到参考。
49行
#include<stdio.h>
struct train
{
int xi;
int yi;
char zi;
int t;
}train[1000];
int main()
{
int n,m;
int i,j,h,k,s;
int a[20][3];
int x,y,yi;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d %d %c",&train[i].xi,&train[i].yi,&train[i].zi);
}
for(i=0;i<m;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<m;i++)
{
s=0;
for(j=0;j<n;j++)
{
if((a[i][0]+a[i][1]*train[j].xi+a[i][2]*train[j].yi)>0) train[j].t=1;
if((a[i][0]+a[i][1]*train[j].xi+a[i][2]*train[j].yi)<0) train[j].t=0;
}
for(k=0;k<n;k++)
{
h=k;
for(j=k+1;j<n;j++)
if(train[h].zi==train[j].zi&&train[h].t!=train[j].t) s++;
if(s>=1)
{
printf("No\n");
break;
}
}
if(s==0) printf("Yes\n");
}
return 0;
}