精华内容
下载资源
问答
  • 实现集合交并差

    2019-01-30 14:11:42
    运用C++实现的小程序,集合的交并差运算。大一时候的一个小课设。可以运行,有exe
  • 集合的交并差

    2013-06-25 16:33:46
    集合的交并差
  • 用C#实现了多边形的布尔运算,采用栅格法,功能是两多边形的交并差,也可以简化为两矩形的交并差求解!
  • 集合的交并差运算

    2018-11-17 23:14:49
    数据结构中集合的交并差运算,使用C++实现,并且设置了良好的界面
  • C++语言交并差集合运算
  • 链表交并差.cpp

    2012-04-17 14:47:06
    链表交并差.cpp 数据结构课程的实验源码
  • 通过链表和指针,实现两个整数集合的交并差顺序输出
  • 顺序表交并差.cpp

    2012-04-17 14:50:51
    顺序表交并差.cpp 数据结构课程实验的源码
  • 集合的

    2013-06-25 08:29:17
    有完善的集合 的遍历运算 集合的元素限定为小写字母
  • C语言数据结构课程设计,集合的交并差,分部完成实验报告。
  • 链表实现集合运算 链表实现集合交并差运算
  • 这是数据结构中的实验代码 交并差的代码
  • 数据结构课程设计 集合的交并差运算 编 号730 拉桂宅孑科弑火遂 GUILIN UNIVERSITY OF ELECTRONIC TECHNOLOGY 数据结构与算法课程设计 说明书 集合的交并差运算 学 院 海洋信息工程学院 专 业 四络工程 学生姓名 xx ...
  • 运用数据结构中的链表的相关的知识,实现集合的交并差,加深对链表的插入删除清空等操作的理解。
  • 链表的交并差运算

    2011-12-27 15:32:30
    运用C++编写,实现链表的交并差运算~!
  • 多边形求交并差

    千次阅读 2017-11-28 15:53:31
    代码:Github:team79/PolygonOverlayAnalysis基本概念介绍多边形交并差计算的算法的相关证明过程是很繁琐,因此在这里将直接给出算法所需的概念以及算法所用到的一些性质。具体的相关证明过程在ZHU Ya-Yin[1]论文中...

    代码:Github:team79/PolygonOverlayAnalysis

    基本概念介绍

    多边形交并差计算的算法的相关证明过程是很繁琐,因此在这里将直接给出算法所需的概念以及算法所用到的一些性质。具体的相关证明过程在ZHU Ya-Yin[1]论文中有详细证明。
    算法中的一些概念:

    • 1、∂A :多边形A 的边的集合, 或A 的边界上点的集合;
    • 2、P ↓:过点P 作的垂直向下射线;
    • 3、<:点的小于比较符, P < Q (Px < Qx )∨(Px =Qx ∧ Py < Qy);
    • 4、P x , Py :P 的横、纵坐标;
    • 5、Lp(e):e 的左端点, 即e 两端点中较小的一个;
    • 6、Rp(e):e 的右端点, 即e 两端点中较大的一个;
    • 7、I(e):e 内点(e 上除端点外的其他点)的集合;
    • 8、e , s :边;
    • 9、C(P ,∂ A):与P ↓有交点, 且右端点不在P ↓上的A 的边集合.即C(P , ∂A)={s s ∈ A , s ∩P ↓≠ , R p(s) P ↓};
    • 10、s1 >P s2 :边s1 , s2 在通过P 点的垂直线x =Px上的比较, 即s1 >P s2 (Q1 >Q2)∨ (Q1 =Q2 ∧Ks1 >Ks2), 其中点Q1 , Q2 表示边s1 , s2 与过P 点的垂线的交点, Ks1 , Ks2 分别表示s1 , s2 的斜率;
    • 11、max(C(P , ∂A)):表示C(P , ∂A)中在P 点处的最大边。

    算法所用到的定理与性质:

    • 1、对于多边形A 的任一条边,设P是e的内点, 如果C(P , ∂A)有奇数条边, 则称e是A的奇边, 简记为+e,否则称e是A的偶边,简记为-e;
    • 2、对于任意两条边s1 , s2 ∈ C(P ,∂ A), 如果s2 是在P 点处小于s1 的最大边, 即s1 >P s2 , 且不存在边e ∈ C(P ,∂ A), 使得s1 >P e , e >P s2 同时成立, 则s1 , s2 在A 中的奇偶相异;
    • 3、对于任一不在多边形A 边界上的点P , 如果过点P 所作的垂直向下的射线与多边形A
      的相交的最大边是偶边, 或没有与A 的任何边相交, 则P 在多边形A 的外域, 其逆亦然;如果射线与A 相交的最大边是奇边, 则P 在多边形A 的内域,其逆亦然;
    • 4、内边:e 的所有内点均位于A 的内域, P , P∈ I(e) P ∈ I (A);
    • 5、外边:e 的所有内点均位于A 的外域, P , P∈ I(e) P ∈ E(A);
    • 6、重叠边: s , s ∈ A , P , P ∈ e P ∈ s;
    • 7、简单边:内边、外边、重叠边;
    • 8、复杂边:不属于简单边的其他边。

    算法总体流程

    算法整体步骤如下:

    • Setp1 .在平面扫描过程中, 计算A , B 的交点(包括切点), 分解复杂边为简单边, 同时根据算法1 , 2 , 确定A , B 边的奇偶性及其拓扑类型, 并记录在数据结构中;
    • Setp2 .针对多边形交、并、差的具体计算特点,分别根据算法2-11、2-12、2-13进行边的跟踪, 输出构成A ∩B , A ∪ B , A -B 的中间多边形;
    • Setp3 .依次构造各中间多边形的Border , 确定中间多边形的方向性.根据定理与性质判断其是洞还是外接多边形;
    • Setp4 .判断洞Border 与外接多边形Border 的包含被包含关系, 确定洞归属于哪个外接多边形, 进而确定A ∩ B , A ∪ B , A -B.

    多边形求交算法

    多边形求交的伪代码表示如下表:

    I   for each e of A , B 的边{
    II  if e 没有访问过∧ (e 是内边∨ )then
    III         do{
    IV          标记e 为已访问;如果e 是重叠边, 还要标记其重叠边e′为已访问;
    V               if e 是奇边then {
    VI              把e 的左端点添加到顶点链表中;
    VII                 P →e 的右端点;
    VIII            }else {∥隐含条件e 是偶边
    IX                  把e 的右端点添加到顶点链表中;
    X                   P →e 的左端点;
    XI              }
    XII             if (在连接P 的另一输入多边形的邻边中, 存在着满足条件的内边s :
    XIII                s 是奇边且P =Lp(s), 或者s 是偶边且P =Rp(s))then e →s ;
    XIV             else e →连接P 的本输入多边形的邻边;
    XV          }until P 与顶点链表中的第1 个顶点相等;
    XVI         输出顶点链表中顶点组成的中间多边形, 并清空顶点链表;
    XVII    } ∥end if
    XVIII} ∥end fo r

    多边形求并算法

    多边形求并的伪代码表示如下表:

    I   for each e of A , B 的边{
    II  if e 没有访问过∧ (e 是外边∨ )then
    III         do{
    IV          标记e 为已访问;如果e 是重叠边, 还要标记其重叠边e′为已访问;
    V               if e 是奇边then {
    VI              把e 的左端点添加到顶点链表中;
    VII                 P →e 的右端点;
    VIII            }else {∥隐含条件e 是偶边
    IX                  把e 的右端点添加到顶点链表中;
    X                   P →e 的左端点;
    XI              }
    XII             if 连接P 的本输入多边形的邻边s 是外边then e→s;
    XIII            else if 连接P 的另一输入多边形的邻边中, 存在着外边s′then e →s′.
    XIV             else e →连接P 的本输入多边形的邻边;
    XV          }until P 与顶点链表中的第1 个顶点相等;
    XVI         输出顶点链表中顶点组成的中间多边形, 并清空顶点链表;
    XVII    } ∥end if
    XVIII} ∥end fo r

    多边形求差算法

    多边形求差的伪代码表示如下表:

    I   for each e of A , B 的边{
    II  if e 没有访问过∧ ((e 是A 的外边)∨ (e 是B 的内边))then {
    III         do{
    IV          记e 为已访问;如果e 是重叠边, 还要标记其重叠边e′为已访问;
    V               if e 是A 的奇边或是B 的偶边then {
    VI              把e 的左端点添加到顶点链表中;
    VII                 P →e 的右端点;
    VIII        }else {∥隐含条件:e 是A 的偶边或是B 的奇边
    IX                  把e 的右端点添加到顶点链表中;
    X                   P →e 的左端点;
    XI              }
    XII             if e 是A 的边, 与P 相连的属于B 的邻边中, 存在着满足条件的内边s:s 是B 的奇边且P 是s的右端点, 或者s 是偶边且P 是s 的左端点then e →s ;
    XII             else if e 是B 的边, 与P 相连的属于A 的邻边中, 存在着满足条件的外边s′:s′是奇边且P 是s′的左端点, 或s′是偶边且P 是s′的右端点then e →s′
    XIV             else e →连接P 的本输入多边形的邻边;
    XV          }until P 与顶点链表中的第1 个顶点相等;
    XVI         输出顶点链表中顶点组成的中间多边形, 并清空顶点链表;
    XVII    } ∥end if
    XVIII} ∥end fo r

    多边形:

    这里写图片描述

    交:

    这里写图片描述

    并:

    这里写图片描述

    差:

    这里写图片描述

    展开全文
  • 编制一个能演示执行集合的运算的程序。 (1)设计集合的运算函数(集合的元素不能重复) (2)编制测试函数测试集合运算 (3)提示:以有序链表表示集合
  • 大二上学期老师要求做的作业,用java实现集合之间的交并差
  • 代码暂支持多边形的交并差,若要支持圆弧,可将圆弧离散成线段
  • 集合的交并差 c++写的 源代码

    热门讨论 2011-01-05 19:41:35
    该源代码描述了集合的交并差运算方法,经过严格测试,能正确运行。运用单链表,用人机交互的方式实现,需要的可以去下载。
  • 关于数据结构课程设计,资源来至于课本,进行的集合交并差运算
  • C语言数组实现交并差

    千次阅读 2018-09-11 21:33:45
    C语言数组实现交并差 这个是输入数组时会检查重复让重新输入,以小于0的整数结束数组的输入 #include&lt;stdio.h&gt; #define MAX 100 int main() { char A,B; int i=0,j=0,k=0,num=0,num_D=0,NUM=...

    C语言数组实现交并差
    这个是输入数组时会检查重复并让重新输入,以小于0的整数结束数组的输入

    #include<stdio.h>
    #define MAX 100
    int main()
    
    {
       char A,B;
       int i=0,j=0,k=0,num=0,num_D=0,NUM=0,nums=0;
       int nums_01[MAX];//第一个数组
       int nums_02[MAX];//第二个数组
       int nums_03[MAX];//记录交集数组
       int nums_04[MAX];//记录并集数组
       bool Judge=true;//用来判断是否重复
       printf("输入集合名:");
       scanf("%c",&A);
        printf("\n输入集合数字:");
       scanf("%d",&nums_01[i]);
       while(nums_01[i]>=0)
       {
            Judge=true;
            for(nums=0;nums<i;nums++)//判断是否重复
            {
                if(nums_01[i]==nums_01[nums])
                {
                    printf("输入有重复请重新输入!!!\n");
                    Judge=false; 
                    break; 
                 } 
            }
            if(Judge)//重复就跳过重新输入
            {
    
             nums_04[k]=nums_01[i];
             i++;
             k++;
            }
             scanf("%d",&nums_01[i]);
        }
       printf("\n输入集合名:");
       fflush(stdin); 
       scanf("%c",&B);
       printf("\n输入集合数字:");
       fflush(stdin);
       scanf("%d",&nums_02[j]);
       while(nums_02[j]>=0)
       {
    
            Judge=true;
            for(nums=0;nums<j;nums++)//判断是否重复
            {
                if(nums_02[j]==nums_02[nums])
                {
                    printf("输入有重复请重新输入!!!\n");
                    Judge=false; 
                    break; 
                 } 
            }
            if(Judge)//重复就跳过重新输入
            {
                nums_04[k]=nums_02[j];//记录并集
                for(num=0;num<=i;num++)//用来记录
                 {
                    if(nums_02[j]==nums_01[num])
                     {
                        nums_03[num_D]=nums_02[j];//记录交集
                        nums_01[num]=-1;//赋予-1,用来区分差集
                        num_D++;
                        k--;//因为重复所以自减覆盖这个数字来达到并集
                        break;
                    }
                  }
               j++;
               k++;
            }
           scanf("%d",&nums_02[j]);
    
       }
    printf("%c交%c:",A,B);
    for(NUM=0;NUM<=num_D-1;NUM++)
    {
       printf("%d\t", nums_03[NUM]);
    }
    printf("\n%c交%c:",A,B);
    for(NUM=0;NUM<k;NUM++)
    {
        printf("%d\t", nums_04[NUM]);
     } 
    printf("\n%c-%c:",A,B);
    for(num=0;num<i;num++)
    {
        if(nums_01[num]!=-1)
        printf("%d\t", nums_01[num]);
    }
        return 0;
    }
    展开全文
  • 为山东科技大学图形学课程的课程设计软件,实现两个矩形之间的交并差运算,以不同的颜色显示出来,实现方法为链表存储节点
  • c++实现集合的交并差运算

    万次阅读 多人点赞 2018-12-18 09:58:14
    实现集合的交并差运算; 如果不懂概念,请自行百度,不作复述; 代码如下: #include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;stdlib.h&gt; using namespace std; int ...

    同样是离散的一个非常简单的实验;

    实现集合的交并差运算;

    如果不懂概念,请自行百度,不作复述;

    代码如下:

    #include<iostream>
    #include<cstring>
    #include<stdlib.h>
    using namespace std;
    int inter(int *a,int *b,int m,int n)//交集 
    {
        int len=m>n?m:n;
        int *c=(int*)malloc(sizeof(int)*len);
        int d=0;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(a[i]==b[j])
                {
                    c[d++]=a[i];
                }
            }
        }
        cout<<"输出a与b的交集:"<<endl;
        for(int i=0;i<d;i++)
        {
            cout<<c[i]<<" ";
        }
        cout<<endl;
    }

    int union_a(int *a,int *b,int m,int n)//并集 
    {
        int k=m,es=1;
        int *c=(int *)malloc(sizeof(int)*(m+n));
        for(int i=0;i<m;i++)
        {
            c[i]=a[i];
            }    
        for(int i=0;i<n;i++)
        {    
            es=1;
            for(int j=0;j<m;j++)
            {
                
                if(b[i]==c[j])
                {
                    es=0;
                }
                
            }
            if(es)
                {
                    c[k]=b[i];
                    k++;
                }
        }
        cout<<"输出集合a,b的并集:"<<endl;
        for(int i=0;i<k;i++)
        {
            cout<<c[i]<<" ";
        }
        cout<<endl;
    }
    int diff(int *a,int *b,int m,int n)//差集 
    {
        int k=0;
        int *c=(int *)malloc(sizeof(int )*m);
        for(int i=0;i<m;i++)
        {
            c[i]=a[i];
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(b[i]==c[j])
                {
                    for(k=j;k<m;k++)
                    {
                        c[k]=c[k+1];
                        m--;
                        break;
                    }
                }
            }
        }
        cout<<"输出集合a,b的差集:"<<endl;
        for(int i=0;i<k;i++)
        {
            cout<<c[i]<<" ";
         } 
         cout<<endl;
    }
    int main()
    {
        int  *a,*b;
        int m,n;//集合a,b的个数 
        int c;
        cout<<"输入集合a的长度:"<<endl;
        cin>>m;
        cout<<"输入集合b的长度:"<<endl;
        cin>>n;
        a=(int*)malloc(sizeof(int)*m);
        b=(int*)malloc(sizeof(int)*n); 
        cout<<"输入集合a:"<<endl;
        for(int i=0;i<m;i++)
        {
            cin>>a[i];
        }
        cout<<"输入集合b:"<<endl;
        for(int i=0;i<n;i++)
        {
            cin>>b[i];
        }
        
        inter(a,b,m,n);
        union_a(a,b,m,n);
        diff(a,b,m,n);
        return 0;
     } 

    结果运行图:

    展开全文
  • c++语言 实现集合的交并差

    千次阅读 2018-03-27 10:09:34
    c++语言的stl模版库中 提供了许多模板算法函数,许多函数不同的用处详细的需要我们自己把握,就拿取集合的交并差运算来说,肯定有很多种实现方式,我们只需记得函数返回值是一个迭代器就好。/* 集合的交并差实现 by...

        c++语言的stl模版库中 提供了许多模板算法函数,许多函数不同的用处详细的需要我们自己把握,就拿取集合的交并差运算来说,肯定有很多种实现方式,我们只需记得函数返回值是一个迭代器就好。

    /* 集合的交并差实现 
    by zhf 2018 03 26
    */
    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int main(){
    vector<int>s1={1,2,3,4,5};
    vector<int>s2={2,3,4,5,6};
    vector<int>s3;
    vector<int>s4;
    vector<int>s5;
    sort(s1.begin(),s1.end());
    sort(s1.begin(),s1.end());
    set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),back_inserter(s3));
    for(int i=0;i<s3.size();i++){
    cout<<s3[i]<<" ";
    }
    cout<<endl;
    sort(s1.begin(),s1.end());
    sort(s2.begin(),s2.end());
    set_union(s1.begin(),s1.end(),s2.begin(),s2.end(),back_inserter(s4));
    for(int i=0;i<s4.size();i++){
    cout<<s4[i]<<" ";
    }
    cout<<endl;
    sort(s1.begin(),s1.end());
    sort(s2.begin(),s2.end());
    set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),back_inserter(s5));
    for(int i=0;i<s5.size();i++){
    cout<<s5[i]<<" ";
    }
    cout<<endl;
    //求并集时候还可以采用去重的方法
    vector<int>::iterator iter;
    copy(s1.begin(),s1.end(),back_inserter(s2));
    sort(s2.begin(),s2.end());
    iter=unique(s2.begin(),s2.end());
    if(iter!=s2.end()){
    s2.erase(iter,s2.end());
    }
    for(int i=0;i<s2.size();i++){
    cout<<s2[i]<<" ";
    }

    }

    展开全文
  • 运用多个函数实现集合的交并差运算,可行性良好,很不错的程序哦~
  • 集合的运算的实现。用有序单链表表示集合,实现集合的运算。对集合中的元素,用有序单链表进行存储。实现运算时,不另外申请存储空间。充分利用单链表的有序性,算法有较好的时间性能...
  • mysql的交并差

    千次阅读 2018-01-08 22:43:25
    Mysql只提供了并集(union),没有提供差集,和交集,可以用union来实现.   先建两个结构一样的表table1和table2   create table table1(name varchar(20)); create table table2(name varchar(20)); ...
  • 集合的 补 运算

    千次阅读 2012-10-18 12:59:09
    这是离散数学上的一个实验题,让用编程实现集合的 补的运算。我这是借鉴的同学的。我自己水平还达不到啊。                                             ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,192
精华内容 58,876
关键字:

交并差