36 lines
		
	
	
		
			842 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			842 B
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2008 William Schlieper <schlieper@unc.edu>
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
 | 
						|
USING: accessors kernel sequences arrays vectors sets assocs hashtables graph-theory namespaces fry ;
 | 
						|
 | 
						|
IN: graph-theory.sparse
 | 
						|
 | 
						|
TUPLE: sparse-graph alist ; 
 | 
						|
 | 
						|
: <sparse-graph> ( -- sparse-graph )
 | 
						|
    H{ } clone sparse-graph boa ;
 | 
						|
 | 
						|
: >sparse-graph ( graph -- sparse-graph )
 | 
						|
    [ vertices ] keep
 | 
						|
    '[ dup _ adjlist 2array ] map >hashtable sparse-graph boa ;
 | 
						|
 | 
						|
INSTANCE: sparse-graph graph
 | 
						|
 | 
						|
M: sparse-graph vertices
 | 
						|
    alist>> keys ;
 | 
						|
 | 
						|
M: sparse-graph adjlist
 | 
						|
    alist>> at ;
 | 
						|
 | 
						|
M: sparse-graph add-blank-vertex 
 | 
						|
    alist>> V{ } clone -rot set-at ;
 | 
						|
 | 
						|
M: sparse-graph delete-blank-vertex
 | 
						|
    alist>> delete-at ;
 | 
						|
 | 
						|
M: sparse-graph add-edge*
 | 
						|
    alist>> swapd at adjoin ;
 | 
						|
 | 
						|
M: sparse-graph delete-edge*
 | 
						|
    alist>> swapd at delete ;
 |