虽然AC,我依然困惑--【附注】POJ 2032解题报告
以后做题的时候,一定不要存在侥幸心理!根据题目情况,不要妄加猜测!!!一定一定,否则,耗时、耗力,还生气!
如果WA,好好读题,先检查容易出错的地方,换种思维去考虑,不要固执!!一定,一定!!
对于这个题目:
因为在DFS的时候,如果是'C',需要遍历两种情况:
那么对于这道题目,有两种方法
1、可以用for(int i=1;i<=2;i++)
{
if(i==1)
{遍历一种情况}
else if(i==2)
{遍历另一种情况}
}
//这种方法被无数次的WA证明,是错误的
2、设置一个MARK数组,布尔型的,用于说明哪一页已经访问过了
if(!mark[])
{}
if(!mark[])
{}
//这种方法,不管是谁都认为正确。
我的困惑是第一种情况:为什么就WA呢?如果输入结果正确,而且,肯定有解的情况下。
Source Code
Problem: 2023 | User: omycle | |
Memory: 288K | Time: 0MS | |
Language: C++ | Result: Accepted |
- Source Code
#include <iostream>
using namespace std;
bool mark[101];
int Totalpage;
int Total=0;
bool flag=false;
typedef struct
{
char type;//C or E
char juzi[260];
char end[10];
int page_1;
int page_2;
}Node;
Node node[101];
int Index[101];
void getstring(char *st)
{
bool flag=false;
getchar();//把第一个空格过滤掉
for(int i=0;;i++)
{
char ch=0;
ch=getchar();
if(!flag&&ch=='\"')
{
i--;
flag=true;
continue;
}
if(flag&&ch=='\"')//第二个双引号
{
break;
}
st[i]=ch;
}
}
void Read()
{
int n=0;
cin>>n;
int i=0;
Totalpage=n;
for(i=0;i<n;i++)
{
cin>>node[i].type;
getstring(node[i].juzi);
if(node[i].type=='C')
{
cin>>node[i].page_1;
cin>>node[i].page_2;
}
else if(node[i].type=='E')
{
cin>>node[i].end;
}
}
}
void Dfs(int page,int index)//一个是向下传递的页数, 一个传递数组的下标
{
if(node[page].type=='E')
{
if(strcmp(node[page].end,"HAPPY")==0)
{
Index[index]=page;
Total=index;
flag=true;
return ;
}
else
return;
}
else//'C'
{
int temp=0;
if(!mark[node[page].page_1-1])
{
temp=node[page].page_1-1;
mark[temp]=true;
Index[index]=page;
Dfs(temp,index+1);
if(flag)
return;
}
if(!mark[node[page].page_2-1])
{
temp=node[page].page_2-1;
mark[temp]=true;
Index[index]=page;
Dfs(temp,index+1);
if(flag)
return ;
}
}
}
void Output()
{
for(int i=0;i<=Total;i++)
{
cout<<node[Index[i]].juzi<<endl;
}
}
int main()
{
int n;
cin>>n;
int k=1;
while(k<=n)
{
memset(mark,false,sizeof(mark));
flag=false;
Total=0;
Totalpage=0;
memset(Index,0,sizeof(Index));
for(int i=0;i<101;i++)
{
node[i].type=0;
memset(node[i].juzi,0,sizeof(node[i].juzi));
memset(node[i].end,0,sizeof(node[i].end));
node[i].page_1=-1;
node[i].page_2=-1;
}
Read();
Dfs(0,0);
printf("STORY %d\n",k);
Output();
k++;
}
// system("pause");
return 0;
}
评论
发表评论