Toj 1069 Erdos Numbers 解题

这个题目就是一个bfs的问题。在数据读取上需要稍加处理。
toj和poj的数据都有一个不是很符合规矩然后造成我这个题re了好多次。
期中有一个数据在最后一个人名结束后跟着一个空格然后是:这样我每次读取判断最后一个是:结束就错了
  1#include<vector>
  2#include<map>
  3#include<iostream>
  4#include<string>
  5#include<string.h>
  6using namespace std;
  7struct C{int p,ans;};
  8vector<int> data[11000];
  9map<string,int> name;
 10int use[11000];
 11C Q[11000];
 12char str[300];
 13int paper[300];
 14string a,b;
 15int main()
 16{
 17    int n,m,l=0,i,head,tail,L,l1,NO,j,f,KASE=0;
 18    //freopen("erdos.in","r",stdin);
 19    //freopen("erdos.txt","w",stdout);
 20    string nn;
 21    nn="Erdos*P.";
 22    while(1){
 23    scanf("%d%d",&n,&m);
 24    if(n==0&&m==0)break;
 25    l=0;
 26    for(i=0;i<10000;i++)data[i].clear();
 27    name.clear();
 28    memset(use,-1,sizeof(use));
 29    memset(Q,0,sizeof(Q));
 30    l=0;
 31    while(n--)
 32    {
 33        f=0;NO=0;
 34        while(1)
 35        {
 36            scanf("%s",str);
 37            l1=strlen(str);
 38            str[l1-1]='*';
 39            a=str;
 40            scanf("%s",str);
 41            l1=strlen(str);
 42            if(str[l1-1]==':')f=1;
 43            if(str[l1-1]=='.')f=1;
 44            str[l1-1]=0;
 45            a=a+str;
 46            if(name.count(a)==0)
 47            {
 48                name[a]=l++;
 49                //cout << a << endl;
 50            }

 51            paper[NO++]=name[a];
 52            if(f)
 53            {
 54                gets(str);
 55                //str=getline();
 56                break;
 57            }

 58        }

 59        
 60        for(i=0;i<NO;i++)
 61            for(j=0;j<NO;j++)if(i!=j)data[paper[i]].push_back(paper[j]);
 62    }

 63    if(name.count(nn)==0)name[nn]=l++;
 64    Q[0].p=name[nn];
 65    Q[0].ans=0;
 66    use[name[nn]]=0;
 67    head=tail=0;
 68    tail++;
 69    while(head!=tail)
 70    {
 71        L=Q[head].p;
 72        l=data[L].size();
 73        for(i=0;i<l;i++)
 74            if(use[data[L][i]]==-1)
 75            {
 76                use[data[L][i]]=Q[head].ans+1;
 77                Q[tail].p=data[L][i];
 78                Q[tail++].ans=Q[head].ans+1;
 79            }
    
 80        head++;
 81    }

 82    printf("Database #%d\n",++KASE);
 83    while(m--)
 84    {
 85            
 86            scanf("%s",str);
 87            printf("%s ",str);
 88            l1=strlen(str);
 89            str[l1-1]='*';
 90            a=str;
 91            scanf("%s",str);
 92            printf("%s: ",str);
 93            a=a+str;
 94            if(name.count(a)==0)printf("infinity\n");
 95            else if(use[name[a]]==-1)printf("infinity\n");
 96            else printf("%d\n",use[name[a]]);
 97    }

 98    printf("\n");
 99    }

100    return 0;
101}

102
103
104

posted on 2008-07-15 19:09 gong 阅读(301) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(6)

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜