java吧 关注:1,253,192贴子:12,742,065
  • 19回复贴,共1

有人能帮我看下这段程序不

只看楼主收藏回复

import java.util.Scanner;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Scanner read = new Scanner(System.in);
int i = 0, j = 0, k = 0,l = 0;
while (read.hasNext()) {
int s=0;
int n = read.nextInt();
if(n==0){
return;
}
int a[][]=new int[n][n];
int b[][]=new int[n][n];
int c[][]=new int[n][n];
for(i = 0;i<n;i++){
for(j = 0;j<n;j++){
a[i][j]=read.nextInt();
}
}
int m = read.nextInt();
for(l=0;l<m;l++){
int x = read.nextInt();
System.out.println(String.format("关系R的%d次幂:",x));
Relation rel = new Relation(a,n);
for(i=0;i<x-1;i++){
rel.poap(a,x);
}
Set set = new Set(rel,n);
set.serprint();
}
}
}
}
class Relation{
int data[][];
int n;
public Relation(int data[][],int n){
this.data=data;
this.n=n;
}
public void poap(int a[][],int x){
int i = 0,j = 0,k = 0;
int s = 0;
int c[][]=new int[n][n];
for(i = 0;i<n;i++){
for(j = 0;j<n;j++){
s=0;
for(k = 0;k<n;k++){
s+=a[i][k]*data[k][j];
}
c[i][j]=s;
}
}
for(i = 0;i<n;i++){
for(j = 0;j<n;j++){
data[i][j]=c[i][j];
}
}
if(x==0){
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==j){
data[i][j]=1;
}
else{
data[i][j]=0;
}
}
}
}
}
}
class Set{
Relation a;
int n;
public Set(Relation a,int n){
this.a=a;
this.n=n;
}
public void serprint(){
int i = 0,j=0;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (a.data[i][j] > 1) {
a.data[i][j] = 1;
}
System.out.print(a.data[i][j]);
if (j != n - 1) {
System.out.print(" ");
}
}
System.out.println();
}
}
}
问题我放二楼


IP属地:俄罗斯1楼2016-05-01 22:57回复
    这段程序目的是为了求一个关系的N次幂,其实就是求矩阵的N次幂,只不过是变成1+1=1的形式,然后下面是问题。


    为啥第三个关系每次幂都不对呢


    IP属地:俄罗斯2楼2016-05-01 23:00
    回复
      求助大神帮忙看下程序,小弟感激不尽


      IP属地:俄罗斯3楼2016-05-01 23:00
      回复
        果然太晚了没人么


        IP属地:俄罗斯4楼2016-05-01 23:37
        回复
          这么多睡觉吧


          来自iPhone客户端5楼2016-05-01 23:51
          回复
            如果是语法方面的问题,大家都愿意回复。如果是算法方面的问题,太费脑筋了,大家一般不愿回复。
            我劝你好好跟踪一下程序,看看问题到底出在哪里。


            6楼2016-05-01 23:51
            收起回复
              你指哪个不对?


              IP属地:美国来自iPhone客户端7楼2016-05-02 00:04
              回复
                而且你的0次幂有问题,当你用int x = read.nextInt();取值x作为幂的次数时,当x为0时,根本不会进入
                for(i=0;i<x-1;i++){
                rel.poap(a,x);
                }
                这个循环,所以你的0次幂不可能会被poap这个方法处理为单位矩阵的


                IP属地:美国8楼2016-05-02 00:12
                收起回复