| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
程序在这里In Reply To:这个题大家怎么过的??我的老是WA,能不能给一些数据啊 ,我试过一些是对的,程序如下: Posted by:ykstars at 2005-05-30 08:42:57 AFKP BELO CHIN DGJM
AEIM BFJN CGKO DHLP
ABCD EFGH IJKL MNOP
AGLN BHKM CEJP DFIO
AHJO BGIP CFLM DEKN
这是我的数据 可以得出结果
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
int d[16][16];
int back(int k,int b[][16],int flag,int t,int rank)
{
int m;
int flag1=flag,flag3=0;
int c[16][16];
int p,q;
int temp[16][16];
int temp1[16][16];
if(t>=15)return 0;
for(p=0;p<16;p++)for(q=0;q<16;q++)
{
temp[p][q]=b[p][q];
temp1[p][q]=b[p][q];
}
if(temp[k][k]==rank&&flag1==0)
{
if(k==15)
{
if(rank==5)
{
for(p=0;p<16;p++)for(q=0;q<16;q++)d[p][q]=temp[p][q];
return 1;
}
else
{
for(q=0;q<16;q++)temp1[q][q]=0;
return (back(0,temp1,0,0,rank+1));
}
}
else
{
for(p=0;p<16;p++)for(q=0;q<16;q++)c[p][q]=temp[p][q];
flag3=back(k+1,c,0,0,rank);
if(flag3==1)
{
return 1;
}
else return 0;
}
}
else
{
for(m=t+1;m<16;m++)
{
if(m==k)continue;
else if(temp[k][m]==0)
{
if(temp[m][m]==rank)continue;
else
{
for(p=0;p<16;p++)
for(q=0;q<16;q++)c[p][q]=temp[p][q];
for(p=0;p<m;p++)
{
if(p==k)continue;
else if(temp[k][p]==rank)
{
if(temp[p][m]!=0)break;
}
}
if(p<m)continue;
flag1++;
temp[k][m]=rank;
temp[m][k]=rank;
temp[m][m]=rank;
temp[k][k]=rank;
for(p=0;p<m;p++)if(temp[k][p]==rank)
{
temp[p][m]=rank;
temp[m][p]=rank;
}
if(flag1==3)
{
if(k==15)
{
if(rank==5)
{
for(p=0;p<16;p++)for(q=0;q<16;q++)d[p][q]=temp[p][q];
return 1;
}
else
{
for(p=0;p<16;p++)for(q=0;q<16;q++)c[p][q]=temp[p][q];
for(q=0;q<16;q++)c[p][p]=0;
return (back(0,c,0,0,rank +1));
}
}
flag3=back(k+1,temp,0,0,rank);
if(flag3==0)
{
return (back(k,c,flag1-1,m,rank));
}
else
{
return 1;
}
}
else
{
flag3=back(k,temp,flag1,m,rank);
if(flag3==0)
{
return (back(k,c,flag1-1,m,rank));
}
else
{
return 1;
}
}
}
}
}
if(m>=16)return 0;
}
}
void main()
{
int i,j;
int a[16][16],b[16][16];
string str1[5];
char hh[4];
int gg,kk;
char c1,c2;
int rank;
int num=0;
string s;
int flag1;
int pp;
string str2[7];
string stemp;
int anum;
string tt[16]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P"};
while(cin>>str1[0])
{
for(i=0;i<3;i++)
{
cin>>s;
str1[0]=str1[0]+" ";
str1[0]=str1[0]+s;
}
for(i=1;i<3;i++)
for(str1[i]="",j=0;j<4;j++)
{
cin>>s;
if(j>0)str1[i]=str1[i]+" ";
str1[i]=str1[i]+s;
}
num++;
for(i=0;i<16;i++)
for(j=0;j<16;j++)a[i][j]=0;
for(i=0;i<3;i++)
for(gg=0,c1=c2=' ',j=0;j<16+3;j++)
{
c1=str1[i].at(j);
if(c1==' '){ gg=0,c2=' ';continue;}
hh[gg]=c1;
gg++;
for(kk=0;kk<gg;kk++)
{
a[c1-'A'][hh[kk]-'A']=i+1;
a[hh[kk]-'A'][c1-'A']=i+1;
}
}
for(i=0;i<16;i++)for(b[i][i]=0,j=0;j<16;j++)b[i][j]=a[i][j];
for(i=0;i<16;i++)b[i][i]=0;
flag1=back(0,b,0,0,4);
if(flag1==1)
{
for(i=0;i<16;i++)for(j=0;j<16;j++)
{
if(i==j)continue;
if(d[i][j]==0)d[i][j]=5;
}
for(rank=1;rank<6;rank++)
{
str2[rank]="";
for(pp=0;pp<16;pp++)d[pp][pp]=rank;
for(i=0;i<16;i++)
if(d[i][i]!=-1)
{
if(i==0)str2[rank]=str2[rank]+"A";
else str2[rank]=str2[rank]+" "+tt[i];
d[i][i]=-1;
for(j=0;j<16;j++)
{
if(i==j)continue;
if(d[i][j]==rank)
{
str2[rank]=str2[rank]+tt[j];
d[i][j]=-1;
d[j][i]=-1;
d[j][j]=-1;
}
}
}
}
for(i=1;i<6;i++)cout<<str2[i]<<endl;
}
else cout<<"It is not possible to complete this schedule."<<endl;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator