Code:
#include <stdio.h>
#define size 12
int A[size][size];
/*Ton ton orisa e3w apo thn main(global)giati ws local sth main
mou evgaze provlhma pws den ginetai initialized*/
int n,row,col,turn=1;
void turn_right(int turn);
void turn_left(int turn);
void facing_wall(int array[][size],int next,int dipla);
void move_forward(int array[][size],int n);
int next,dipla;
int main()
{
int *ip;
printf("size of array\n");
scanf("%d",&n);
for (row=0;row<n;row++)
{
printf("give the %d row of the array:",row+1);
for (col=0;col<n;col++)
{
scanf("%d",&A[row][col]);
}
}
for (row=0;row<n;row++)
{
for (col=0;col<n;col++)
{
ip=&A[row][col];
printf("%d ",*ip);
}
printf("\n");
}
move_forward(A,n);
return 0;
}
/*To robot eiserxetai pantote apo thn aristerh pleura,
opote to forward gi' auto einai na kinh8ei pros to telos
ths prwths grammhs.*/
/*==========================================================*/
void move_forward(int array[size][size],int n)
{
int row=0,col=-1,prev=0,cur,j,i;
int *ip;
for (i=0;i<n;i++)
{
/*h grammh panw apo ton pinaka*/
array[-1][i]=1;
/*h sthlh aristera tou pinaka*/
array[i][-1]=1;
/*h grammh katw apo ton pinaka*/
array[n][i]=1;
/*h sthlh de3ia tou pinaka*/
array[i][n]=1;
array[0][-1]=0;
/*
printf("array[-1][%d]=%d\n",i,array[-1][i]);
printf("array[%d][-1]=%d\n",i,array[i][-1]);
printf("array[%d][%d]=%d\n",n,i,array[n][i]);
printf("array[%d][%d]=%d\n",i,n,array[i][n]);
*/
}
scanf("%d",&j);
cur=array[row][col-1];
printf("outside while row=%d col=%d n=%d cur=%d\n",row,col,n,cur);
while (row!= n-1 && col != n-1)
{
/*go right*/
if(turn==1)
{
printf("next=%d\n",next);
printf("dipla=%d\n",dipla);
col=col+1;
cur=array[row][col];
ip=&cur;
printf("turns=%d\n",turn);
printf("array[%d][%d]=%d\n",row,col,*ip);
next=array[row][col+1];
dipla=array[row+1][col];
facing_wall(A,next,dipla);
}
facing_wall(A,next,dipla);
/*go down*/
if(turn==2)
{
//facing_wall(A);
//prev=cur;
printf("next=%d\n",next);
printf("dipla=%d\n",dipla);
row=row+1;
cur=array[row][col];
ip=&cur;
printf("turns=%d\n",turn);
printf("array[%d][%d]=%d\n",row,col,*ip);
next=array[row+1][col];
dipla=array[row][col-1];
facing_wall(A,next,dipla);
}
facing_wall(A,next,dipla);
/*go left*/
if(turn==3)
{
printf("next=%d\n",next);
printf("dipla=%d\n",dipla);
col=col-1;
cur=array[row][col];
ip=&cur;
printf("turns=%d\n",turn);
printf("array[%d][%d]=%d\n",row,col,*ip);
ip=&cur;
printf("turns=%d\n",turn);
printf("array[%d][%d]=%d\n",row,col,*ip);
next=array[row][col-1];
dipla=array[row+1][col];
facing_wall(A,next,dipla);
}
facing_wall(A,next,dipla);
/*go up*/
if(turn==4)
{
printf("next=%d\n",next);
printf("dipla=%d\n",dipla);
row=row-1;
cur=array[row][col];
ip=&cur;
printf("turns=%d\n",turn);
printf("array[%d][%d]=%d\n",row,col,*ip);
ip=&cur;
printf("turns=%d\n",turn);
printf("array[%d][%d]=%d\n",row,col,*ip);
next=array[row-1][col];
dipla=array[row][col+1];
facing_wall(A,next,dipla);
}
scanf("%d",&j);
}
return;
}
/*stripse de3ia*/
void turn_right(int turn)
{
turn=1+turn;
if(turn==5)
{
turn=1;
}
return;
}
/*stripse aristera*/
void turn_left(int turn)
{
turn=turn-1;
if(turn==0)
{
turn=4;
}
return;
}
/*vrhkame se toixo ? */
void facing_wall(int array[size][size],int next,int dipla)
{
if(next==1 || dipla==0)
{
turn_right(turn);
printf("koitame de3ia\n");
}
else if(next==0|| dipla==0)
{
turn_right(turn);
printf("koitame de3ia\n");
}
else if(next==1 && dipla==1)
{
turn_left(turn);
printf("aristera\n");
}
return;
}
[/edited]