همانطور که گفته شد نقاط بحرانی گرهها و ارتباطات بین آنها یالهای گراف را تشکیل می دهند. بنابراین برای یافتن گراف عملیات زیر انجام می دهیم .
1-یافتن گرههای گراف بدیهی است که هر نقطه بحرانی یک گره از گراف را تشکیل می دهد بنابراین کافی است نقاط بحرانی را یافته و موقعیت هر یک از آنها را به عنوان یک گره از گراف ثبت کنیم.
for j:=y1 to y2 do
for i:=x1 to x2 do
if(GetBufPixel(i,j)=CColor)then
Begin
G.SetInfo(index,i,j);
index:=Index+1;
End;
2- یافتن یالها : برای هر گره با توجه به نقاط اطراف آن یالهائی که به گره وارد شده یا از آن خارج می شوند را جستجو می کنیم بدین منظور از تابع Findedge استفاده شده است .
for k:=0 to index-1 do
Begin
G.GetInfo(k,i,j);
Road:=255;Road1:=255;
while(GetFriend1(i,j,i1,j1,Road))do
Begin
FindEdgs(i1,j1,k,Road,G);
Road1:=Road1 And GetRoad(i-i1,j-j1);
Road:=Road1;
End
End
2-1) findedge: این تابع که یک تابع بازگشتی است ، از یک نقطه شروع کرده و در یک مسیر مشخص آنقدر جلو می رود تا به یک نقطه بحرانی برسد سپس یال بین این نقطه و نقطه مبدا را علامتگذاری کرده و باز می گردد این عملیات طی مراحل زیر انحام می شود .
2-1-1) بررسی می شود که آیا نقطه بحرانی است یا خیر؟ واگر این نقطه یک نقطه بحرانی است و همان نقطه مبدا نیست ارتباط بین این گره و گره مبدا را برقرار می کنیم .
if(GetBufPixel(i,j)=CColor)then
Begin
indx:=G.GetIndex(i,j);
if(indx<>index)then
G.SetEdge(indx,index);
FindEdgs:=indx;
Exit;
End;
2-1-2) همچنین در صورتیکه در اطراف نقطه جاری، نقطه ای بحرانی وجود داشته باشد، عملیات فوق را با آن انجام می دهیم.
if(GetFriend(i,j,i1,j1,CColor,Road))then
Begin
indx:=G.GetIndex(i1,j1);
if(indx<>index)then
G.SetEdge(indx,index);
FindEdgs:=indx;
Exit;
End
2-1-3) و در انتها در صورتیکه نقطه جاری از نقاط بحرانی نباشد عملیات فوق را با نقاط اطراف آن انجام می دهیم و گره بازگردانده شده را به عنوان یکی از همسایه های گره جاری در نظر می گیریم .
else if(GetBufPixel(i,j)=NcColor)then
Begin
putpixel(i,j,BackColor);
Road1:=Road;
indx:=index;
while(GetFriend1(i,j,i1,j1,Road))do
Begin
indx:=FindEdgs(i1,j1,index,Road{Road1&Road},G);
Road1:=Road1 and GetRoad(i-i1,j-j1);
Road:=Road1;
if(indx<>index)then
Begin
G.SetEdge(indx,index);
if(GetFriend1(i,j,i1,j1,Road))then
putpixel(i,j,NcColor);
FindEdgs:=indx;
exit;
End
End;
putpixel(i,j,NcColor);
FindEdgs:=indx;
Exit;
End;