int l, i, j, k, m, i, min_position, min_final_position
float min_energy, energy, min_final_energy
point nextNode , currNode,
snaxel[NUM_SNAXELS], neighbor[NUM_NEIGHBORS]
/* initialize first column of energy matrix */
for (l=0;l<NUM_NEIGHBORS;l++)
energyMtx[0][l]=0.0;
001 for (i=0;i<NUM_SNAXELS;i++)
002 {
003 for (j=0;j<NUM_NEIGHBORS;j++) /* for all neighbors of next node */
004 {
005 min_energy = BIG
006 for (k=0;k<NUM_NEIGHBORS;k++) /*for all neighors of curr node*/
Related Equation in Tutorial
007 {
008 nextNode = snaxel[i+1] + neighbor[j]
009 currNode = snaxel[i] + neighbor[k]
010 energy = energyMtx[i-1][k] + E(currNode, nextNode)
011 if (energy < min_energy)
012 {
013 min_energy = energy
014 min_position = k
015 }
016 }
017 /* Store minimum energy into table */
018 energyMtx[i][j] = min_energy
019 posMtx[i][j] = min_position
020 }
021 }
022
023 /* search final column for minimum energy */
024 min_final_energy = BIG
025 for (m=0;m<NUM_NEIGHBORS;m++)
026 {
027 if(energyMtx[n-1][m] < min_final_energy)
028 {
029 min_final_energy = energyMtx[n-1][m]
030 min_final_position = m
031 }
032 }
033 pos = min_final_position
034
035 /* search backwards through table to find optimum postions */
036 for(i=NUM_SNAXELS-1;i>0;i--)
037 {
038 snaxel[i] = snaxel[i] + neighbor[pos]
039 pos = posMtx[i-1][pos]
040 }
041
042 redraw snake