62,614
社区成员
发帖
与我相关
我的任务
分享
public class Warshall {
// s数组表示灾害之间引发关系
static char[][] s={{'a','b'},{'b','c'},{'b','d'},{'c','d'},{'d','e'},{'g','h'}};
//pos数组表示一共有多少个不同的灾害:下标0-第一个灾害,下标1-第二个灾害
static int[] pos={'a','b','c','d','e','g','h'};
//数组b是求最终的灾害关系的传递闭包。即:所有的灾害链。此时全为false
//数组b也就是最终结果
static boolean[][] b=new boolean[pos.length][pos.length];
//对数组b初始化。按照数组s来进行。
private static void init()
{
for(int i=0; i<s.length;i++)
{
b[index(s[i][0])][index(s[i][1])]=true;
//含义:两维数组b中,若'a'与'b'有灾害关系,则b['a']['b']填true。无关是false.
}//for(i)
for(int i=0;i<b.length;i++)
{
b[i][i]=true;//关系的自反性
}
}
// 求关系a的传递闭包
public static void warshall(boolean[][] a)
{
for(int i=0;i<=a.length-1;i++)
{
for(int j=0;j<=a.length-1;j++)
{
if(a[j][i]==true)
{
for(int k=0;k<=a.length-1;k++)
{
a[j][k]=a[j][k] | a[i][k];
}//for(k)
}//if
}//for(j)
}//for(i)
}//warshall
//打印出最终结果
public static void print(boolean[][] a)
{
for(int i=0;i<a.length;i++)
{
System.out.print("灾害:"+(char)pos[i]+" 所引发的灾害链是:{");
for(int j=0;j<a.length;j++)
{
if(a[i][j]==true){
System.out.print((char)pos[j]+" ");
}
}//for(j)
System.out.print("} \n");
}//for(i)
}
//返回字符ch在数组pos中的下标
private static int index(char ch)
{
for(int i=0;i<pos.length;i++)
{
if(pos[i]==ch)
{ return i; }
}
return -1;
}
public static void main(String[] args) {
init(); //对数组b初始化。
warshall(b);//求出所有的灾害链
print(b);//打印出所求的结果
}
}
public class Warshall {
// s数组表示灾害之间引发关系
static char[][] s={{'a','b'},{'b','c'},{'b','d'},{'c','d'},{'d','e'},{'g','h'}};
//pos数组表示一共有多少个不同的灾害:下标0-第一个灾害,下标1-第二个灾害
static int[] pos={'a','b','c','d','e','g','h'};
//数组b是求最终的灾害关系的传递闭包。即:所有的灾害链。此时全为false
//数组b也就是最终结果
static boolean[][] b=new boolean[pos.length][pos.length];
//对数组b初始化。按照数组s来进行。
private static void init()
{
for(int i=0; i<s.length;i++)
{
b[index(s[i][0])][index(s[i][1])]=true;
//含义:两维数组b中,若'a'与'b'有灾害关系,则b['a']['b']填true。无关是false.
b[i][i]=true;//关系的自己性
}//for(i)
}
// 求关系a的传递闭包
public static void warshall(boolean[][] a)
{
for(int i=0;i<=a.length-1;i++)
{
for(int j=0;j<=a.length-1;j++)
{
if(a[j][i]==true)
{
for(int k=0;k<=a.length-1;k++)
{
a[j][k]=a[j][k] | a[i][k];
}//for(k)
}//if
}//for(j)
}//for(i)
}//warshall
//打印出最终结果
public static void print(boolean[][] a)
{
for(int i=0;i<a.length;i++)
{
System.out.print("灾害:"+(char)pos[i]+" 所引发的灾害链是:{");
for(int j=0;j<a.length;j++)
{
if(a[i][j]==true){
System.out.print((char)pos[j]+" ");
}
}//for(j)
System.out.print("} \n");
}//for(i)
}
//返回字符ch在数组pos中的下标
private static int index(char ch)
{
for(int i=0;i<pos.length;i++)
{
if(pos[i]==ch)
{ return i; }
}
return -1;
}
public static void main(String[] args) {
init(); //对数组b初始化。
warshall(b);//求出所有的灾害链
print(b);//打印出所求的结果
}
}