西南科技大學OJ題 帶權有向圖計算1063

帶權有向圖計算

 5000(ms)

 10000(kb)

 2297 / 5754

假設帶權有向圖G採用鄰接矩陣存儲,計算圖的最大權值、最小權值以及對應的有向邊。

輸入

第一行第一個整數n表示頂點的個數(頂點編號爲0到n-1),第二行表示頂點i和j,接下來是爲一個n*n大小的整數矩陣,表示圖的鄰接關係。數字爲大於0表示鄰接值,-1表示不鄰接,對角線爲0。

輸出

第一行爲最大權值,第二行爲有向邊。第三行爲最小權值,第四行爲有向邊。
由於OJ無法顯示尖括號,所以這裏用圓擴號來表示有序對。

樣例輸入

5 
0 5 -1 23 -1 
-1 0 31 56 -1 
-1 -1 0 -1 -1 
-1 -1 -1 0 -1 
56 -1 -1 19 0

樣例輸出

56
(1 3)(4 0)
5
(0 1)
注意:由於顯示的問題,輸出數據應採用尖括號。

 

#include<stdio.h>
void CreateMap(int n,int edges[100][100])//創建鄰接矩陣 
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&edges[i][j]);
        }
    }
}
int main()
{
    int edges[100][100];
    int n;int max=0,min=999;//初始化最大值和最小值 
    scanf("%d",&n);
    CreateMap(n,edges);
    for(int i=0;i<n;i++)//查找最小權值和最大權值 
    {
        for(int j=0;j<n;j++)
        {
            if(edges[i][j]>0&&edges[i][j]>max) max=edges[i][j];
            if(edges[i][j]>0&&edges[i][j]<min) min=edges[i][j];
        }
    }
    printf("%d\n",max);//輸出最大權值,以及對應的邊 
    for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(edges[i][j]==max) printf("<%d %d>",i,j);
    printf("\n%d\n",min);//輸出最小權值,以及對應的邊
    for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(edges[i][j]==min) printf("<%d %d>",i,j);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章