判断序偶的关系

#include <bits/stdc++.h>
#define ll long long
using namespace std;
pair<char,char>mp[1000];
pair<char,char>mpp[1000];
pair<char,char>anp[1000];
map<pair<int,int>,int>flo;
char a[1000],b[1000];
int main()
{
    int i=0;
    char str;
    cout<<"请输入A集合"<<endl;
    while(cin>>str)
    {
        if(str=='.') break;
        if(str==',')
        {

        }
        else a[i++]=str;
    }
    int len1=i;
    i=0;
    cout<<"请输入B集合"<<endl;
    while(cin>>str)
    {
        if(str=='.') break;
        if(str==',')
        {

        }
        else b[i++]=str;
    }
    int len2=i;
    int ans=0,sum=0;
    for(i=0; i<len1; i++)
    {
        for(int j=0; j<len2; j++)
        {
            mp[sum].first=a[i];
            mp[sum].second=b[j];
            sum++;
        }
    }
    for(i=0; i<len1; i++)
    {
        for(int j=0; j<len1; j++)
        {
            mpp[ans].first=a[i];
            mpp[ans].second=a[j];
            ans++;
        }
    }

    int solve,pi;
    cout<<"输出A x B:输入1"<<endl;
    cout<<"输出A x A:输入2"<<endl;
    while(cin>>solve)
    {
        if(solve==1)
        {
            for(int i=0; i<sum; i++)
            {
                cout<<i<<" "<<'<'<<mp[i].first<<mp[i].second<<'>'<<endl;
            }
        }
        if(solve==2)
        {
            for(int i=0; i<ans; i++)
            {
                cout<<i<<" "<<'<'<<mpp[i].first<<mpp[i].second<<'>'<<endl;
            }
        }
        cout<<"继续操作:1    判断关系:2";
        cin>>pi;
        if(pi==2)
        {
            break;
        }
    }
    while(1)
    {
        cout<<"请选择要判断的子集 停止输出:-1"<<endl;
        ans=0;
        int a;
        flo.clear();
        while(cin>>a)
        {
            if(a==-1) break;
            anp[ans++]=mpp[a];
            flo[mpp[a]]=1;//映射
        }
        cout<<"判断自反 1,判断传递 2,判断反对称 3,判断反自反 4,判断对称 5,结束 0";
        while(cin>>a)
        {
            if(a==0)
            {
                break;
            }
            if(a==1)
            {
                map<int,int>st;
                st.clear();
                bool flag=1;
                for(int i=0; i<ans; i++)
                {
                    if(anp[i].first==anp[i].second)
                    {
                       st[anp[i].first]=1;
                    }
                }
                for(int i=0; i<ans; i++)
                {
                    if(!st[anp[i].first]){
                        flag=0;
                        break;
                    }
                }
                if(flag==0) cout<<"NO"<<endl;
                else cout<<"YES"<<endl;
            }
            if(a==2)
            {
                bool flag=1;
                for(int i=0; i<ans; i++)
                {
                    char pl=anp[i].first;
                    char p2=anp[i].second;
                    for(int j=0; j<ans; j++)
                    {
                        if(anp[j].first==p2)
                        {
                            flag=1;
                            if(pl==anp[j].first)
                            {
                                if(!flo[make_pair(pl,anp[j].second)])
                                {
                                    cout<<"NO"<<endl;
                                    flag=0;
                                    break;
                                }
                            }
                        }
                    }
                    if(flag==0)
                    {
                        break;
                    }
                }
                if(flag)
                {
                    cout<<"YES"<<endl;
                }
            }
            if(a==3)
            {
                bool flag=1;
                for(int i=0; i<ans; i++)
                {
                    if(anp[i].first!=anp[i].second)
                    {
                        if(flo[make_pair(anp[i].second,anp[i].first)])
                        {
                            flag=0;
                            break;
                        }
                    }
                }
                if(flag) cout<<"YES"<<endl;
                else cout<<"NO"<<endl;
            }
            if(a==4)
            {
                bool flag=1;
                for(int i=0; i<ans; i++)
                {
                    if(anp[i].first==anp[i].second)
                    {

                        flag=0;
                        break;
                    }
                }
                if(flag) cout<<"YES"<<endl;
                else cout<<"NO"<<endl;
            }
            if(a==5)
            {
                bool flag=1;
                for(int i=0; i<ans; i++)
                {
                    if(!flo[make_pair(anp[i].second,anp[i].first)])
                    {

                        flag=0;
                        break;
                    }
                }
                if(flag) cout<<"YES"<<endl;
                else cout<<"NO"<<endl;
            }

        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/smallocean/p/9153260.html