Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.96 KB | None | 0 0
  1. package main
  2. // export PATH=/users/j0sh/local/go/bin:$PATH
  3.  
  4. import (
  5.   "os"
  6.   "bufio"
  7.   "fmt"
  8.   // "math"
  9.   "math/rand"
  10.   "sort"
  11. )
  12.  
  13. type edge struct {
  14.   source, dest int
  15. }
  16.  
  17. func main() {
  18.   nodes := 0
  19.  
  20.   println("allocate")
  21.   edge_set := make(map[edge]bool)
  22.  
  23.   infline, err := os.Open("com-orkut.ungraph.txt")
  24.   if err != nil { panic(err) }
  25.   defer infline.Close()
  26.  
  27.   outfile, err := os.Create("orkut-relabeled.edgelist")
  28.   if err != nil { panic(err) }
  29.   defer outfile.Close()
  30.  
  31.   scanner := bufio.NewScanner(infline)
  32.   scanner.Split(bufio.ScanLines)
  33.  
  34.   println("read graph")
  35.   for scanner.Scan() {
  36.     line := scanner.Text()
  37.     if line[0] == '#' {
  38.       continue
  39.     }
  40.     var a,b int
  41.     n, err := fmt.Sscanf(line, "%d\t%d\n", &a, &b)
  42.     if n != 2 {
  43.       println("failed to scan")
  44.       println(line)
  45.     }
  46.     if err != nil {
  47.       panic(err)
  48.     }
  49.  
  50.     if a > b {
  51.       a,b = b,a
  52.     }
  53.     if b > nodes {
  54.       nodes = b
  55.     }
  56.     if a > nodes {
  57.       nodes = a
  58.     }
  59.  
  60.     edge_set[edge{a,b}] = true
  61.  
  62.   }
  63.   nodes += 1
  64.  
  65.   // node_degrees := make([]int, nodes)
  66.   // for edge, _ := range edge_set {
  67.   //   node_degrees[edge.source]++;
  68.   //   node_degrees[edge.dest]++;
  69.   // }
  70.   // sorted_slice := NewSlice(node_degrees...)
  71.  
  72.  
  73.   println("permute")
  74.   new_node_descriptors := rand.Perm(nodes)
  75.  
  76.   edges := len(edge_set)
  77.   fmt.Fprintln(outfile, nodes, edges)
  78.   for edge, _ := range edge_set {
  79.     fmt.Fprintln(outfile,
  80.       new_node_descriptors[edge.source],
  81.       new_node_descriptors[edge.dest],
  82.       // sorted_slice.idx[edge.source],
  83.       // sorted_slice.idx[edge.dest],
  84.     )
  85.   }
  86.  
  87. }
  88.  
  89. type Slice struct {
  90.   sort.IntSlice
  91.   idx []int
  92. }
  93.  
  94. func (s Slice) Swap(i, j int) {
  95.   s.IntSlice.Swap(i, j)
  96.   s.idx[i], s.idx[j] = s.idx[j], s.idx[i]
  97. }
  98.  
  99. func NewSlice(n ...int) *Slice {
  100.   s := &Slice{IntSlice: sort.IntSlice(n), idx: make([]int, len(n))}
  101.   for i := range s.idx {
  102.     s.idx[i] = i
  103.   }
  104.   return s
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement