#include<stdio.h>
#define MAX_COUNTRIES 99
struct CONNECTION{
int connectedCountry;
int next;
};
int color[MAX_COUNTRIES];
CONNECTION connectionNumArray[MAX_COUNTRIES * MAX_COUNTRIES];//used as adjacent list
int numOfConnections;
int headCountry[MAX_COUNTRIES];
int queue[MAX_COUNTRIES];
int head;
int tail;
int main(){
int numOfCountries;
scanf("%d", &numOfCountries);
int country;
for (country = 1; country <= numOfCountries; country++){
color[country] = -1;
int connectedCountry;
while (1){
scanf("%d", &connectedCountry);
if (connectedCountry == 0)
break;
numOfConnections++;
int connectionNum = numOfConnections;
connectionNumArray[connectionNum].connectedCountry = connectedCountry;
connectionNumArray[connectionNum].next = headCountry[country];
headCountry[country] = connectionNum;
numOfConnections++;
connectionNum = numOfConnections;
connectionNumArray[connectionNum].connectedCountry = country;
connectionNumArray[connectionNum].next = headCountry[connectedCountry];
headCountry[connectedCountry] = connectionNum;
}
}
color[1] = 0;
queue[tail++] = 1;
while (head < tail){
int countryPoped = queue[head++];
int index;
for (index = headCountry[countryPoped]; index != 0; index = connectionNumArray[index].next){
int connectedCountry = connectionNumArray[index].connectedCountry;
if (color[connectedCountry] == -1){
color[connectedCountry] = 1 - color[countryPoped];
queue[tail++] = connectedCountry;
} else {
if (color[connectedCountry] == color[countryPoped]){
printf("-1");
return 0;
}
}//end of if (color[connectedCountry] == -1)
}//end of for connectedCountry
}//end of while (head < tail)
for (country = 1; country <= numOfCountries; country++)
printf("%d", color[country]);
return 0;
}
URAL 1080 Map Coloring (BFS)
最新推荐文章于 2020-09-10 19:37:28 发布