It's a competitive neural network model, nothing to do with multi-layered perceptrons. Your application can be seen as a self organizing map,
and is very close to a Kohonen Map. The difference is that you try to build the topology during the learning process, the topology isn't static, that's why I suggested to have a look on Growing Neural Gas. It will explain : how to link/unlink nodes and how to create/destroy nodes.
I do think my topology will be static, I am only creating these nodes and then linking them, once that is finished, the connections and nodes will never change again, I won't create or destroy nodes or unlink them. The map will just be created once in the beginning and then used 'as is' afterwards.
Essentially, traversing the map will be the user's responsibility, if that makes a difference.
Will it be helpful if I post some of my code?
#define MAX_NODES 100
#define GRID_W 50
#define GRID_H 50
struct node
{
int x,y;
int links;
int link[4];
};
struct node node[MAX_NODES];
void genMap()
{
//create grid
int grid[GRID_W][GRID_H];
int i,j;
//zero grid
for (i=0;i<GRID_W;i++)
for (j=0;j<GRID_H;j++)
grid[i][j]=0;
//fill grid
for (i=0;i<MAX_NODES;i++)
{
//variable for guesses
int gx,gy;
do
{
gx=rand()%GRID_W;
gy=rand()%GRID_H;
} while (grid[gx][gy]!=0);
grid[gx][gy]=i+1;
node[i].x=gx;
node[i].y=gy;
}
//link nodes....
for (i=0;i<MAX_NODES;)
{
//........
}
return;
}
Something like that....