(X) : (Y)) #define INFINITE 10000000 void push(const int * const * C, int ** F, int *excess, int u, int v) { int send = MIN(excess, C - F); F += send; F -= send; excess -= send; excess += send; } void relabel(const int * const * C, const int * const * F, int *height, int u) { int v; int min_height = INFINITE; for (v = 0; v < NODES; v++) { if (C - F > 0) { min_height = MIN(min_height, height); height = min_height + 1; } } }; void discharge(const int * const * C, int ** F, int *excess, int *height, int *seen, int u) { while (excess > 0) { if (seen < NODES) { int v = seen; if ((C - F > 0) && (height > height)) { push(C, F, excess, u, v); } else { seen += 1; } } else { relabel(C, F, height, u); seen = 0; } } } void moveToFront(int i, int *A) { int temp = A; int n; for (n = i; n > 0; n--) { A = A; } A = temp; } int pushRelabel(const int * const * C, int ** F, int source, int sink) { int *excess, *height, *list, *seen, i, p; excess = (int *) calloc(NODES, sizeof(int)); height = (int *) calloc(NODES, sizeof(int)); seen = (int *) calloc(NODES, sizeof(int)); list = (int *) calloc((NODES-2), sizeof(int)); for (i = 0, p = 0; i < NODES; i++){ if((i != source) && (i != sink)) { list = i; p++; } } height = NODES; excess = INFINITE; for (i = 0; i < NODES; i++) push(C, F, excess, source, i); p = 0; while (p < NODES - 2) { int u = list; int old_height = height; discharge(C, F, excess, height, seen, u); if (height > old_height) { moveToFront(p, list); p = 0; } else { p += 1; } } int maxflow = 0; for (i = 0; i < NODES; i++) maxflow += F; free(list); free(seen); free(height); free(excess); return maxflow; } void printMatrix(const int * const * M) { int i,j; for (i = 0; i < NODES; i++) { for (j = 0; j < NODES; j++) printf("%d\t",M); printf("\n"); } } int main(void) { int **flow, **capacities, i; flow = (int **) calloc(NODES, sizeof(int*)); capacities = (int **) calloc(NODES, sizeof(int*)); for (i = 0; i < NODES; i++) { flow = (int *) calloc(NODES, sizeof(int)); capacities = (int *) calloc(NODES, sizeof(int)); } //Sample graph capacities = 2; capacities = 9; capacities = 1; capacities = 0; capacities = 0; capacities = 7; capacities = 7; capacities = 4; printf("Capacity:\n"); printMatrix(capacities); printf("Max Flow:\n%d\n", pushRelabel(capacities, flow, 0, 5)); printf("Flows:\n"); printMatrix(flow); return 0; } Python implementation def relabel_to_front(C, source, sink): n = len(C) # C is the capacity matrix F = * n for _ in xrange(n)] # residual capacity from u to v is C - F height = * n # height of node excess = * n # flow into node minus flow from node seen = * n # neighbours seen since last relabel # node "queue" nodelist = def push(u, v): send = min(excess, C - F) F += send F -= send excess -= send excess += send def relabel(u): # find smallest new height making a push possible, # if such a push is possible at all min_height = ∞ for v in xrange(n): if C - F > 0: min_height = min(min_height, height) height = min_height + 1 def discharge(u): while excess > 0: if seen < n: # check next neighbour v = seen if C - F > 0 and height > height: push(u, v) else: seen += 1 else: # we have checked all neighbours. must relabel relabel(u) seen = 0 height = n # longest path from source to sink is less than n long excess = ∞ # send as much flow as possible to neighbours of source for v in xrange(n): push(source, v) p = 0 while p < len(nodelist): u = nodelist old_height = height discharge(u) if height > old_height: nodelist.insert(0, nodelist.pop(p)) # move to front of list p = 0 # start from front of list else: p += 1 return sum(F) Cormen, T. H.; Leiserson, C. E.; Rivest, R. L.; Stein, C. (2001). "§26 Maximum flow".
این کد تمام رشته‌های مورد نیاز برای تولید هر ۱۲ جمله را در خود به صورت زمر شده دارد و سپس با تکرار آن‌ها جملات مربوط به شعر را می‌سازد: #include <stdio.h> main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_, main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13? main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t, "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+,/+#n+,/#\ ;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \ q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \ ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;'/w#q#n'wk nw' \ iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \ ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \ }'+}##(!!/") :t<-50?_== *a?putchar(31):main(-65,_,a+1):main((*a =='/')+t,_,a+1) :0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc i@bK'(q)-*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);} حتی با زبان پایتون نیز می‌توان کدها را مبهم‌سازی کرد، کد زیر نمونه این عمل در زبان پایتون است: # Primes < 1000 print filter(None,map(lambda y:y*reduce(lambda x,y:x*y!=0, map(lambda x,y=y:y%x,range(2,int(pow(y,0.5)+1))),1),range(2,1000))) # First 10 Fibonacci numbers print map(lambda x,f=lambda x,f:(x<=1) or (f(x-1,f)+f(x-2,f)): f(x,f), range(10)) # Mandelbrot set print (lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambda x,y:x+y,map(lambda y, Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,Sy=Sy,L=lambda yc,Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,i=IM, Sx=Sx,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru,yc=yc,Ru=Ru,Ro=Ro, i=i,Sx=Sx,F=lambda xc,yc,x,y,k,f=lambda xc,yc,x,y,k,f:(k<=0)or (x*x+y*y >=4.0) or 1+f(xc,yc,x*x-y*y+xc,2.0*x*y+yc,k-1,f):f(xc,yc,x,y,k,f):chr( 64+F(Ru+x*(Ro-Ru)/Sx,yc,0,0,i)),range(Sx))):L(Iu+y*(Io-Iu)/Sy),range(Sy ))))(-2.1, 0.7, -1.2, 1.2, 30, 80, 24) # \___ ___/ \___ ___/ | | |__ lines on screen # V V | |______ columns on screen # | | |__________ maximum of "iterations" # | |_________________ range on y axis # |____________________________ range on x axis در مثالی دیگر می‌توان برنامه زیر که اعداد اول کوچک‌تر از ۱۰۰ را یافته و چاپ می‌کند را با تعییر تابع primes مبهم‌سازی کرد : void primes(int cap) { int i, j, composite; for(i = 2; i < cap; i++) { composite = 0; for(j = 2; j < i; j++) composite += !(i % j); if(!composite) printf("%d\t", i); } } int main() { primes(100); } کد بالا پس از اعمال تغییرات مبهم‌سازی چون: جایگزینی حلقه‌های for با یک حلقه while به همراه دستورات تو در توی if-else بازنویسی حلقه while را به صورت بازگشتی تبدیل دستورات if-else را به کاراکترهای تکی مشابه از بین بردن متغیرهای میانی جهت مخفی سازی هدف و نتیجه تابع تغییر نام متغیرها به کاراکترهایی چون _ و __ پاک کردن فاصله‌های سفید و پرانتزهای غیر ضروری به شکل زیر تغییر می‌کند: _(__,___,____){___/__<=1?_(__,___+1,____):!(___%__)?_(__,___+1,0):___%__==___/ __&&!____?(printf("%d\t",___/__),_(__,___+1,0)):___%__>1&&___%__<___/__?_(__,1+ ___,____+!(___/__%(___%__))):___<__*__?_(__,___+1,____):0;}main(){_(100,0,0);} مبهم‌سازی خودکار کد مزایای قابل شمارشی دارد که بهره‌گیری از آن در پلاتفرم‌های گوناگون را محبوب کرده‌است.