http://acm.pku.edu.cn/JudgeOnline/problem?id=1154
Код:
#include <iostream>
#include <list>
#include <cstring>
using namespace std;
const int len=sizeof(char)*26;
struct NODE
{
int row,col,step;
bool v[26];
};
int d[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
list<NODE>p;
NODE temp,t;
int main()
{
int row,col,i,best;
char map[25][25],ch;
scanf("%d%d\n",&row,&col);
for(i=0;i<row;i++)
gets(map[i]);
temp.row=0;
temp.col=0;
temp.step=1;
memset(temp.v,0,len);
ch=map[0][0];
temp.v[ch-'A']=true;
p.push_back(temp);
best=1;
while(!p.empty())
{
temp=p.front();
p.pop_front();
if(temp.step>best)
best=temp.step;
for(i=0;i<4;i++)
{
t.row=temp.row+d[i][0];
t.col=temp.col+d[i][1];
if(t.row>=0 && t.row<row && t.col>=0 && t.col<col)
{
ch=map[t.row][t.col];
if(!temp.v[ch-'A'])
{
memcpy(t.v,temp.v,len);
t.v[ch-'A']=true;
t.step=temp.step+1;
p.push_back(t);
}
}
}
}
printf("%d\n",best);
return 0;
}