這個問題類似於圖形學裏面的渲染四聯通區域的問題,最簡單的做法就是采用遞歸來完成的種子填充算法,每次投食後遍歷壹次二維數組,a[i][j]>0則a[i][j]加1。
判斷該點是否符合繁殖條件。如果符合則向四聯通區域擴張繁殖,然後依次對四聯通區域裏的每壹個點遞歸執行以上邏輯(判斷->擴張)。
下面是偽碼:
array?expandFromSeedNode(array?a,?seedNodeXindex?i,?seedNodeyindex?j)?{//判斷
if(a[i][j]?==?4)?{
//擴張
if(?i-1?>=?0)?{
a[i-1][j]?=?a[i-1][j]?+?1;
a[i][j]?=?a[i][j]?-?1;
//遞歸
return?expandFromSeedNode(a,?i-1,?j);
}?
if(?i+1?<?n)?{
a[i+1][j]?=?a[i+1][j]?+?1;
a[i][j]?=?a[i][j]?-?1;
return?expandFromSeedNode(a,?i+1,?j);
}?
if(?j-1?>=?0)?{
a[i][j-1]?=?a[i][j-1]?+?1;
a[i][j]?=?a[i][j]?-?1;
return?expandFromSeedNode(a,?i,?j-1);
}?
if(?j+1?>=?0)?{
a[i][j+1]?=?a[i][j+1]?+?1;
a[i][j]?=?a[i][j]?-?1;
return?expandFromSeedNode(a,?i,?j+1);
}?
}?else?{
return?a;
}
}