zoukankan      html  css  js  c++  java
  • 线性分类器

    依旧用的结构体。。。ps.好像是可以给一个输入进行一次输出的。

    //2020-6-1 线性分类器
    //给定一条直线,判断它是否能将训练数据中A,B两类点分开 
    #include<iostream>
    
    using namespace std;
    
    struct Point//
    {
    int x,y;//二维坐标 
    char type;//所属类别 
    };
    Point point[1001];
    
    struct Line//线
    {
    int a0,a1,a2;//a0+a1x+a2y=0
    int flag;//1-可以完美分割 0-不可完美分割 
    }; 
    Line line[21];
    
    int main()
    {
        int n,m;//n个点,m条线
        cin>>n>>m; 
        
        
        for(int i=0;i<n;i++)
        {
            cin>>point[i].x>>point[i].y>>point[i].type; 
        }
        for(int i=0;i<m;i++)
        {
            int lineLoc;//-1线下 1线上
            
            cin>>line[i].a0>>line[i].a1>>line[i].a2;
            line[i].flag=1;//初始化 
            
            //由第一个点确定线上线下位置与所属类别的关系 
            if(line[i].a0+line[i].a1*point[0].x+line[i].a2*point[0].y>0)lineLoc=1;
            else if(line[i].a0+line[i].a1*point[0].x+line[i].a2*point[0].y<0)lineLoc=-1;
            
            for(int j=1;j<n;j++)
            {
                  if(lineLoc==1)
                  {
                      if(line[i].a0+line[i].a1*point[j].x+line[i].a2*point[j].y>0)
                      {
                          if(point[j].type!=point[0].type) line[i].flag=0; 
                    }
                    else if(line[i].a0+line[i].a1*point[j].x+line[i].a2*point[j].y<0)
                    {
                        if(point[j].type==point[0].type) line[i].flag=0;
                    }
                }
                else if(lineLoc==-1)
                {
                    if(line[i].a0+line[i].a1*point[j].x+line[i].a2*point[j].y<0)
                      {
                          if(point[j].type!=point[0].type) line[i].flag=0; 
                    }
                    else if(line[i].a0+line[i].a1*point[j].x+line[i].a2*point[j].y>0)
                    {
                        if(point[j].type==point[0].type) line[i].flag=0;
                    }
                }
            } 
            if(line[i].flag==1)cout<<"Yes"<<endl;
            else if(line[i].flag==0)cout<<"No"<<endl; 
        }
        return 0;
    } 
  • 相关阅读:
    优先队列总结
    CodeForces 567D One-Dimensional Battle Ships
    CodeForces 567D One-Dimensional Battle Ships
    codeforces 1016B. Segment Occurrences
    codeforces 1016B. Segment Occurrences
    poj3249(求最长路)
    poj3249(求最长路)
    poj 2186
    2017年第八蓝桥杯C/C++ A组国赛 —— 第二题:生命游戏
    Fence Repair POJ
  • 原文地址:https://www.cnblogs.com/precious112/p/13720641.html
Copyright © 2011-2022 走看看