想顺便练练邻接矩阵
#include <iostream>
#include <string.h>#include <stdio.h>
#include <stdlib.h>
using namespace std;
int SG[1111<<1];
int N;
typedef struct Arcnode//头结点
{
int num;
Arcnode *next;
}Arcnode;
Arcnode gra[1111];
int dfs( int u)
{
if(SG[u] != -1)
return SG[u];
int vis[1111] = {0};
Arcnode *now = gra[u].next;
while(now)
{
vis[dfs(now->num)]++;
now = now->next;
}
for( int i = 0; i < N; i++)
if(!vis[i])
return SG[u] = i;
}
int main()
{
while(scanf("%d",&N) != EOF && N)
{
int m, v;
for( int i = 0; i < N; i++)
SG[i] = -1;
for(int i = 0; i < N; i++)
{
scanf("%d",&m);
gra[i].num = i;
gra[i].next = NULL;
Arcnode * p = gra[i].next;
for( int j = 0; j < m; j++ )
{
scanf("%d",&v);
Arcnode* q = (Arcnode*) malloc (sizeof(Arcnode));
q->num = v;
q->next = p;
p = q;
gra[i].next = q;
}
}
int que;
while(scanf("%d",&que) != EOF && que)
{
int temp = 0, a;
for( int i = 0; i < que; i++)
{
scanf("%d", &a);
temp ^= dfs(a);
}
if(temp)
printf("WIN\n");
else
printf("LOSE\n");
}
}
}