位运算的使用(Floyd)

来源:互联网 发布:魔方虚拟光驱软件 编辑:程序博客网 时间:2024/06/05 19:37

题目:点击打开链接

代码:

#include<stdio.h>#include<string.h>int a, q[201][201];char d[30];int main(){int i, j, k, b, c;    while(~scanf("%d",&a))    {        if(a==0)            return 0;        memset(q,0,sizeof(q));        while(~scanf("%d%d",&b,&c))        {            if(b==0 && c==0)                break;            scanf("%s",d);            for(i=0; d[i]; i++)            {                q[b][c] |= 1<<(d[i]-'a');            }        }        for(k=1; k<=a; k++)            for(i=1; i<=a; i++) {if (q[i][k] != 0) {for(j=1; j<=a; j++)q[i][j] |= (q[i][k] & q[k][j]); }}        while(~scanf("%d%d",&b,&c))        {            if(b==0 && c==0)                break;if (q[b][c] == 0)putchar('-');            else {for(i=0; i<26; i++) {if (q[b][c] & 1<<i)putchar('a'+i);}   }           putchar('\n');        }    putchar('\n');    }    return 0;}
上面用了状态压缩,就说是管总结出来的,他说poj1077就是得用状态压缩,但是那道题我并不会做,,,,,,去看看。

0 0