View Code of Problem 17

#include<bits/stdc++.h>
using namespace std;
int find(int a[][100],int n,int m)
{
	int i,j,x,y;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]==1)
				x=i,y=j;
	int begin=1;
	int startx=x,starty=y;
	int nextx=0,nexty=1;
	int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
	int dirflag=0;
    int	flag=0;
	while(1)
	{
		nextx=startx+dir[dirflag][0]; 
		nexty=starty+dir[dirflag][1]; 
		if(a[nextx][nexty]==(begin+1))
		{
			flag=0;
			startx=nextx;
			starty=nexty;
			begin++;
			continue;
		}
		else
		{
			dirflag=(dirflag+1)%4;
			flag++;
		} 
		if(flag==4)
			return begin-1;
	}
}
int main()
{
	int n,m,i,j;
	int a[100][100];
	while(cin>>n>>m)
	{
		for(i=0;i<=n+1;i++)
			for(j=0;j<=n+1;j++)
				a[i][j]=0;
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				cin>>a[i][j];
		cout<<find(a,n,m)<<endl;		
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 17