数据读入可真让我想了好半天,酝酿好久才敢开写,又一次证明小心总是没错的。
过了样例后,一直WA,奇怪了好久,看了网上的代码才想起,我忘了清vector了,吃一堑长一智吧。。。。。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
#define MAX 151
using namespace std;
typedef struct node{
int a,b;
};
int n,m,k,L,r[2050];
vector<node> tab[MAX][MAX];
void readIn(){
int i,j,x,t;
char c;
node q;
for(i=0;i<n;i++){
for(j=0;j<k;j++){
x=0; t=0; c=getchar();
while(c!='\n'){
if(c>='0'&&c<='9'){
x*=10; x+=(c-'0');
}else{
if(t%2==0)q.a=x;
else {
q.b=x;
tab[i][j].push_back(q);
}
t++,x=0;
}
c=getchar();
}
q.b=x;
tab[i][j].push_back(q);
}
}
}
int func(int x,int y){
int i,j;
node h;
if(r[y*2]==-1&&r[y*2+1]==-1){
for(i=0;i<tab[x][ r[y] ].size();i++){
h=tab[x][ r[y] ].at(i);
if(h.a>=n-m&&h.b>=n-m)return 1;
}
}else{
for(i=0;i<tab[x][ r[y] ].size();i++){
h=tab[x][ r[y] ].at(i);
if(func(h.a,y*2)==1&&func(h.b,y*2+1)==1)
return 1;
}
}
return 0;
}
int main(){
int i,j,t,cas=0; char c; node x;
while(scanf("%d %d %d",&n,&m,&k),n&&m&&k){
if(cas>0)printf("\n");
getchar();
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)tab[i][j].clear();
readIn();
printf("NTA%d:\n",++cas);
while(scanf("%d",&L)&&L!=-1){
getchar();
j=1;
memset(r,-1,sizeof(r));
for(i=0;i<=L;i++){
c=getchar();
while(c!='\n'){
if(c!=' '){
if(c!='*') r[j++]=c-'a';
else j++;
}
c=getchar();
}
}
if(func(0,1)==1)printf("Valid\n");
else printf("Invalid\n");
}
}
return 0;
}