1.1 用邻接矩阵存储有向图
例 1.1 用邻接矩阵存储有向图,并输出各顶点的出入和入度。
输入描述:
输入文件中包含多个测试数据,每个测试数据描述了一个无权有向图。每个测试数据的第一
行为两个正整数 n 和 m,1 ≤ n ≤ 100,1 ≤ m ≤ 500,分别表示该有向图的顶点数目和边数,顶点的
序号从 1 开始计起。接下来有 m 行,每行为两个正整数,用空格隔开,分别表示一条边的起点和
终点。每条边出现一次且仅一次,图中不存在自身环和重边。输入文件最后一行为 0 0,表示输入
数据结束。
输出描述:
对输入文件中的每个有向图,输出两行:第 1 行为 n 个正整数,表示每个顶点的出度;第 2
行也为 n 个正整数,表示每个顶点的入度。每两个正整数之间用一个空格隔开,每行的最后一个
正整数之后没有空格。
样例输入:
7 9
1 2
2 3
2 5
2 6
3 5
4 3
5 2
5 4
6 7
0 0
样例输出:
1 3 1 1 2 1 0
0 2 2 1 2 1 1
代码
package main
import (
"bufio"
"bytes"
"fmt"
"log"
"os"
"strconv"
)
var (
inputFile = "./testdata/input.txt"
array = [100][100]int{}
vCount, eCount = 0, 0
)
func main() {
file, err := os.Open(inputFile)
if err != nil {
log.Fatalln(err)
}
scanner := bufio.NewScanner(file)
for i := 0; scanner.Scan(); i++ {
a, b := 0, 0
fmt.Sscan(scanner.Text(), &a, &b)
if a == 0 && b == 0 {
break
}
if i == 0 {
vCount, eCount = a, b
continue
}
array[a-1][b-1] = 1
}
buf := bytes.NewBuffer(nil)
for i := 0; i < vCount; i++ {
sum := 0
for j := 0; j < vCount; j++ {
sum += array[i][j]
}
buf.WriteString(strconv.Itoa(sum))
if i != vCount-1 {
buf.WriteByte(' ')
} else {
buf.WriteByte('\n')
}
}
for i := 0; i < vCount; i++ {
sum := 0
for j := 0; j < eCount; j++ {
sum += array[j][i]
}
buf.WriteString(strconv.Itoa(sum))
if i != vCount-1 {
buf.WriteByte(' ')
} else {
buf.WriteByte('\n')
}
}
fmt.Print(buf.String())
}
如果是此文是转载文章,本人会附上转载链接,此篇文章的版权归原创作者所属,如果侵权请与我联系,我会删除此文。
若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:
作者:feiquan
出处:http://www.cnblogs.com/feiquan/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)
若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:
作者:feiquan
出处:http://www.cnblogs.com/feiquan/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)