烦人的幻灯片

来源:互联网 发布:php socket可以做什么 编辑:程序博客网 时间:2024/05/15 23:53
//不知道如何将字母和数字对应起来 #include<iostream>#include<stack>#include<cstring>using namespace std;const int MAXN=1000;int outd[MAXN],ans[MAXN];int n;bool a[MAXN][MAXN];stack<int> st;struct slide{int x_min,x_max,y_min,y_max;} s[MAXN];//结构体 幻灯片 struct letter{int x,y; } l[MAXN];//结构体 数字  bool judge(int i,int j){    if (l[i].x>=s[j].x_min && l[i].x<=s[j].x_max && l[i].y>=s[j].y_min && l[i].y<=s[j].y_max) return true;    else return false;}//判断数字与幻灯片能否对应 void print(){    char ch;    int b[MAXN];    for (int i=1; i<=n; i++) b[ans[i]]=i;//将数字与幻灯片的对应转化为幻灯片与数字的对应     for (int i=1; i<=n; i++)    {        ch=i-1+'A';        cout<<ch<<' '<<b[i]<<endl;    }}//输出  int main(){    int i,j,temp,num=0,item;    memset(outd,0,sizeof(outd));    cin>>n;    for (i=1; i<=n; i++) cin>>s[i].x_min>>s[i].x_max>>s[i].y_min>>s[i].y_max;//输入幻灯片坐标     for (i=1; i<=n; i++)//幻灯片数字     {        cin>>l[i].x>>l[i].y;        for (j=1; j<=n; j++)//幻灯片字母         {            a[i][j]=judge(i,j);            if (a[i][j]) outd[i]++;//如果可以对应幻灯片数字 出度加一         }    }    for (i=1; i<=n; i++)         if (outd[i]==1)//寻找出度为一的点          {            st.push(i);//进栈             for (j=1; j<=n ;j++)                 if (a[i][j])                {                    a[i][j]=false;                    ans[i]=j;// j是幻灯片字母 ,i幻灯片数字对应的幻灯片字母                     num++;//个数加一                      break;                }            outd[i]=0;//注意这里要修改出度 防止以后再次访问这个点          }    while (!st.empty())//当栈不为空时     {        temp=st.top();        st.pop();//出栈         item=ans[temp];        for (i=1; i<=n; i++) //幻灯片数字         if(a[i][item])        {            a[i][item]=false;            outd[i]--;//幻灯片数字出度--          }//删掉与该幻灯片相连的所有边          for (i=1; i<=n; i++) //再看有没有出度为1的幻灯片数字             if (outd[i]==1)            {                st.push(i);                for (j=1; j<=n ;j++)                     if (a[i][j])                    {                        a[i][j]=false;                        ans[i]=j;                        num++;                        break;                    }                outd[i]=0;            }//寻找出度为一的点 同上      }    if (num==n) print();    else cout<<"None"<<endl;//输出 }
原创粉丝点击