虽然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;
    }


评论

此博客中的热门博文

提交了30次才AC ---【附】POJ 2488解题报告

n个进程共享m个资源得死锁问题证明