| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 548 人关注过本帖
标题:一道搜索题,试了部分答案都对,不知道为什么提交是错误的,求指出错误
只看楼主 加入收藏
wu3097857312
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-8-14
结帖率:75%
收藏
 问题点数:0 回复次数:6 
一道搜索题,试了部分答案都对,不知道为什么提交是错误的,求指出错误
题目:
  呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体.  
Harry已经将他所会的所有咒语都列成了一个表,他想让你帮忙计算一下他是否能完成老师的作业,将一个B(ball)变成一个M(Mouse),你知道,如果他自己不能完成的话,他就只好向Hermione请教,并且被迫听一大堆好好学习的道理.

  
Input
  测试数据有多组。每组有多行,每行一个单词,仅包括小写字母,是Harry所会的所有咒语.数字0表示一组输入结束.

  
Output
  如果Harry可以完成他的作业,就输出"Yes.",否则就输出"No."(不要忽略了句号)
  意思就像这样big-got-them。
  这是我的程序,是自学算法完全是个菜鸟,真的没办法找错误,调试过自己放的答案都对,不知道错哪了
  #include<iostream>
  #include<string>
  using namespace std;
  int n,k,flag=0;
  struct node
  {
   char name[10];
  }s[100];
  int visit[100];
  void dfs(int i,int l)
  {
   int str;
     
  if(s[i].name[l-1]=='m')
   flag=1;
   for(int j=1;j<=k;j++)
   {   
   
  str=strlen(s[j].name);
   if(s[i].name[l-1]==s[j].name[0] && visit[j]==0)
   {  
  visit[j]=1;
   dfs(j,str);
   visit[j]=0;
   }
   }
  }
  int main()
  {
   int i=0;
   while(cin>>s[++i].name)
   {
   flag=0;
   if(strcmp(s[i].name,"0")==0)
   {
   k=i-1;   
  for(int j=1;j<=k;j++)
   {
   int l=strlen(s[j].name);
   if(s[j].name[0]=='b')
   {
   for(int u=1;u<=k;u++)
   visit[u]=0;
   dfs(j,l);
   }
   }
   i=0;
   if(flag==1)
   cout<<"YES"<<endl;
   else
   cout<<"NO"<<endl;
   getchar();
     
  }
     
  }
   return 0;
  }
搜索更多相关主题的帖子: 棒球 变形 单词 字母 
2012-08-15 11:28
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
把OJ地址给出来。
2012-08-15 13:54
wu3097857312
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-8-14
收藏
得分:0 
回复 2楼 demonleer
是杭电OJ的1181.能帮忙看下吗,谢谢
2012-08-15 14:53
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
杭电1181题。
楼主仔细看看output要求的输出是什么。
题面套用了HP作为故事背景,其本质是判断图中两点的连通性。
送一段我的AC代码。
程序代码:
#include<stdio.h>
#include<string.h>
int map[26][26];
int yeah()
{
    int f[26] = {0}, list[32] = {1}, len = 1, i, j;
    for(i = 0; i < len; i++)
    for(j = 0; j < 26; j++)
    if(map[list[i]][j] && !f[j])
    {
        if(j == 12) return 1;
        f[j] = 1;
        list[len++] = j;
    }
    return 0;
}
int main()
{
    int i;
    char s[64] = {0};
    while(scanf("%s", s) != EOF)
    if(s[0] == '0') for(puts(yeah() ? "Yes." : "No."), i = 0; i < 676; map[0][i++] = 0);
    else map[s[0] - 'a'][s[strlen(s) - 1] - 'a'] = 1;
    return 0;
}

重剑无锋,大巧不工
2012-08-15 14:56
wu3097857312
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-8-14
收藏
得分:0 
回复 4楼 beyondyf
难道我理解错了吗,因为我图还没学到,我现在在学搜索,树的概念是学完了,所以我是认为这是需找各种组合,连起来得到最后的m,我就用上面的方法,这种不是用深度收索吗,我不明白我的错在哪里。。。你的方法是可以理解的。
2012-08-15 15:03
wu3097857312
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-8-14
收藏
得分:0 
回复 4楼 beyondyf
说错了,你的方法看不懂。。。
2012-08-15 15:12
wu3097857312
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-8-14
收藏
得分:0 
回复 4楼 beyondyf
好了,是输出格式错误,因为我英语不大好,题目是别人翻译制作的。。。下次一定认着,浪费大家时间。。
2012-08-15 15:18
快速回复:一道搜索题,试了部分答案都对,不知道为什么提交是错误的,求指出错误 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012849 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved