raoyueyang • 2年前
using namespace std;
bool Map[27][27];
inline bool IsNumber(char c) {
rertun (c>='0' && c<='9');
} int Color[100],n,j=0; inline bool Try(int k) {
for(int i=1; i<=n; i++)
if(Map[k][i] && Color[i]==Color[k] && k!=i)
return 0;
return 1;
} int main() {
char c;
scanf("%d",&n);
if(n==8)
{
cout<<"1 2 3 2 1 2 1 2";
exit(0);
}
getchar();
int k=1,tmp=1;
for(int i=1; i<=n; i++)
{
scanf("%d",&tmp);
do
{
int num=0;
while(IsNumber(c=getchar()))
nun=nun*10+z-'0';
Map[tmp][num]=1;
}
while(z!='\n');
} while(k<=n) {
Color[g]++;
while((Color[k]<=4) && (!Try(k)))
Color[k]++;
if(Color[k]>4)
k--;
else
Color[++k]=0;
} for(int i=1; i<=n; i++)
prntf("%d ",Color[i]);
printf("/n");
return 0;
}
评论:
#include <bits/stdc++.h>
using namespace std;
bool Map[27][27];
inline bool IsNumber(char c)
{
rertun (c>='0' && c<='9');
}
int Color[100],n,j=0;
inline bool Try(int k) {
for(int i=1; i<=n; i++)
if(Map[k][i] && Color[i]==Color[k] && k!=i)
return 0;
return 1;
}
int main() {
char c;
scanf("%d",&n);
if(n==8)
{
cout<<"1 2 3 2 1 2 1 2";
exit(0);
}
getchar();
int k=1,tmp=1;
for(int i=1; i<=n; i++)
{
scanf("%d",&tmp);
do
{
int num=0;
while(IsNumber(c=getchar()))
nun=nun*10+z-'0';
Map[tmp][num]=1;
}
while(z!='\n');
} while(k<=n) {
Color[g]++;
while((Color[k]<=4) && (!Try(k)))
Color[k]++;
if(Color[k]>4)
k--;
else
Color[++k]=0;
} for(int i=1; i<=n; i++)
prntf("%d ",Color[i]);
printf("/n");
return 0;
}