POJ2570:Fiber Network

http://poj.org/problem?id=2570

题目看似与Floyd无关,但是我们可以用Floyd算法的思想去解决。在这里我们将每一位小写字母转化成对应的二进制位,刚好需要一个整型数据来保存结果,通过逻辑与或操作来完成对应位的操作。开始交的时候用g++然后用printf()输出,结果一直超时,改用putchar()后就过了,然后用将语言改为c++ 结果用printf()输出也过了,只不过时间上慢一点。。看来putchar的速度还是很快的。。。

源代码如下:

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std ;

int map[201][201] ; 
int n ;
int main()
{
	int i ;
	int k ;
	int j ;
	int p ;
	int q ;
	char ch ;
	char str[27] ;
	
	while(scanf("%d" , &n)!=EOF && n)
	{
		memset(map , 0 , sizeof(map)) ;
		
		while(scanf("%d %d" , &p , &q ))
		{
			if(p==0||q==0)
				break ;
				
			scanf("%s" , str) ;
			
			for(i = 0 ; str[i] ; i ++)
				map[p][q] |= 1<<(str[i]-'a') ;
		}
		
		for(k = 1 ; k <= n ; k ++)
			for(j = 1 ; j <= n ; j ++)
				for(i = 1 ; i <= n ; i ++)
					map[j][i] |= map[j][k] & map[k][i] ;
		
		while(scanf("%d %d" , &p , &q))
		{
			if(p==0 || q==0)
				break ;
			
			for(ch='a' ; ch <= 'z' ; ++ch)
				if(map[p][q]&(1<<(ch-'a')))
					putchar(ch);		
			
			if(!map[p][q])
				putchar('-') ;
				
			putchar('\n') ;		
		}
		putchar('\n') ;
		
	}
	return 0 ;
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值