Chinaunix首页 | 论坛 | 博客
  • 博客访问: 38523
  • 博文数量: 64
  • 博客积分: 2640
  • 博客等级: 少校
  • 技术积分: 670
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-26 13:15
文章分类
文章存档

2010年(64)

我的朋友
最近访客

分类: C/C++

2010-01-26 13:59:09

2009-03-30 17:02 

#include<iostream>
#include<fstream>
using namespace std;
const int MAX = 100;
const int INFI = 100000;
struct{
      int n;
      int adjvex[MAX];
      int weight[MAX];
}Edge[MAX];
bool T[MAX][MAX];
void TransitiveClosure(int n);
int main(void){
    int n,e,a,b,v;
    int i,j;
    ifstream in("data.in");
    ofstream out("data.out");
   
    in>>n>>e;
    for(i=1;i<=n;i++)
        Edge[i].n = 0;
   
    for(i=0;i<e;i++){
        in>>a>>b;
        Edge[a].adjvex[ Edge[a].n++ ] = b;
    }
   
    TransitiveClosure(n);
   
    for(i=1;i<=n;i++)
       for(j=1;j<=n;j++)
           out<<"T["<<i<<"]["<<j<<"]:"<<T[i][j]<<endl;
                           
    system("pause");
    return 0;
}
void TransitiveClosure(int n){
     int i,j,k,u;
    
     memset(T,0,sizeof(T) );
     for(i=1;i<=n;i++)
        for(j=0;j<Edge[i].n;j++){
            u = Edge[i].adjvex[j];
            T[i][u] = true;
        }
     for(i=1;i<=n;i++)
        T[i][i] = true;
       
     for(k=1;k<=n;k++)
        for(i=1;i<=n;i++)
           for(j=1;j<=n;j++)
               T[i][j] = T[i][j]||(T[i][k]&&T[k][j]);
}


阅读(250) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~