To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / _FullBNT / BNT / graph / mk_nbrs_of_dag.m @ 8:b5b38998ef3b
History | View | Annotate | Download (1.21 KB)
| 1 |
function [Gs, op, nodes] = mk_nbrs_of_dag(G0) |
|---|---|
| 2 |
% MK_NBRS_OF_DAG Make all DAGs that differ from G0 by a single edge deletion, addition or reversal |
| 3 |
% [Gs, op, nodes] = mk_nbrs_of_dag(G0) |
| 4 |
% |
| 5 |
% Gs{i} is the i'th neighbor.
|
| 6 |
% op{i} = 'add', 'del', or 'rev' is the operation used to create the i'th neighbor.
|
| 7 |
% nodes(i,1:2) are the head and tail of the operated-on arc. |
| 8 |
|
| 9 |
Gs = {};
|
| 10 |
op = {};
|
| 11 |
nodes = []; |
| 12 |
|
| 13 |
[I,J] = find(G0); |
| 14 |
nnbrs = 1; |
| 15 |
% all single edge deletions |
| 16 |
for e=1:length(I) |
| 17 |
i = I(e); j = J(e); |
| 18 |
G = G0; |
| 19 |
G(i,j) = 0; |
| 20 |
Gs{nnbrs} = G;
|
| 21 |
op{nnbrs} = 'del';
|
| 22 |
nodes(nnbrs, :) = [i j]; |
| 23 |
nnbrs = nnbrs + 1; |
| 24 |
end |
| 25 |
|
| 26 |
% all single edge reversals |
| 27 |
for e=1:length(I) |
| 28 |
i = I(e); j = J(e); |
| 29 |
G = G0; |
| 30 |
G(i,j) = 0; |
| 31 |
G(j,i) = 1; |
| 32 |
if acyclic(G) |
| 33 |
Gs{nnbrs} = G;
|
| 34 |
op{nnbrs} = 'rev';
|
| 35 |
nodes(nnbrs, :) = [i j]; |
| 36 |
nnbrs = nnbrs + 1; |
| 37 |
end |
| 38 |
end |
| 39 |
|
| 40 |
[I,J] = find(~G0); |
| 41 |
% all single edge additions |
| 42 |
for e=1:length(I) |
| 43 |
i = I(e); j = J(e); |
| 44 |
if i ~= j % don't add self arcs |
| 45 |
G = G0; |
| 46 |
G(i,j) = 1; |
| 47 |
if G(j,i)==0 % don't add i->j if j->i exists already |
| 48 |
if acyclic(G) |
| 49 |
Gs{nnbrs} = G;
|
| 50 |
op{nnbrs} = 'add';
|
| 51 |
nodes(nnbrs, :) = [i j]; |
| 52 |
nnbrs = nnbrs + 1; |
| 53 |
end |
| 54 |
end |
| 55 |
end |
| 56 |
end |
| 57 |
|
| 58 |
|
| 59 |
|
| 60 |
|
| 61 |
|
| 62 |
|
| 63 |
|
| 64 |
|