TJU1031
直接模擬做。棋盤共有(10*10*4)^2=160000種狀態(tài),循環(huán)160000次以后還沒相遇就認(rèn)為無解了。
代碼方面么……自己喜歡設(shè)計(jì)點(diǎn)class,估計(jì)看上去好理解一些哈~~
#include<iostream>
using?namespace?std;
enum?Direction{North,East,South,West};
typedef?struct{int?x,y;Direction?d;}Point;
class?Map
{
public:
????Map();
????int?meet();
????void?move();
????int?seconds;
private:
????int?item[10][10];
????Point?Cat,Mouse;
????void?Fill(char?s,int?x,int?y);
????int?movable(Point&?pos);
};
int?main()
{
????int?data;
????cin>>data;
????Map*?m;
????while(data--?>?0)
????{
????????m=new?Map();
????????while(!m->meet())
????????{
????????????m->move();
????????????if(m->seconds>160000l)
????????????{
????????????????m->seconds?=?-1;
????????????????break;
????????????}
????????}
????????cout<<m->seconds<<endl;
????}
????return?0;
}
Map::Map()
{
????char?s[10];
????int?count1,count2;
????for(count1=0;count1<10;count1++)
????{
????????cin>>s;
????????for(count2=0;count2<10;count2++)
????????????Fill(s[count2],count1,count2);
????}
????seconds?=?0;
????Cat.d?=?Mouse.d?=?North;
}
int?Map::meet()
{return?(Cat.x==Mouse.x?&&?Cat.y==Mouse.y);}
void?Map::Fill(char?s,int?x,int?y)
{
????switch(s)
????{
????case?'*':?item[x][y]=0;break;
????case?'.':?item[x][y]=1;break;
????case?'C':?item[x][y]=1;Cat.x=x,Cat.y=y;break;
????case?'M':?item[x][y]=1;Mouse.x=x,Mouse.y=y;break;
????}
}
void?Map::move()
{
????if(!movable(Cat))?Cat.d=(Direction)((Cat.d+1)%4);
????if(!movable(Mouse))?Mouse.d=(Direction)((Mouse.d+1)%4);
????seconds++;
}
int?Map::movable(Point&?pos)
{
????switch(pos.d)
????{
????case?North:
????????if(0!=pos.x?&&?item[pos.x-1][pos.y]){pos.x--;return?1;}
????????break;
????case?East:
????????if(9!=pos.y?&&?item[pos.x][pos.y+1]){pos.y++;return?1;}
????????break;
????case?South:
????????if(9!=pos.x?&&?item[pos.x+1][pos.y]){pos.x++;return?1;}
????????break;
????case?West:
????????if(0!=pos.y?&&?item[pos.x][pos.y-1]){pos.y--;return?1;}
????????break;
????}
????return?0;
}
代碼方面么……自己喜歡設(shè)計(jì)點(diǎn)class,估計(jì)看上去好理解一些哈~~
#include<iostream>
using?namespace?std;
enum?Direction{North,East,South,West};
typedef?struct{int?x,y;Direction?d;}Point;
class?Map
{
public:
????Map();
????int?meet();
????void?move();
????int?seconds;
private:
????int?item[10][10];
????Point?Cat,Mouse;
????void?Fill(char?s,int?x,int?y);
????int?movable(Point&?pos);
};
int?main()
{
????int?data;
????cin>>data;
????Map*?m;
????while(data--?>?0)
????{
????????m=new?Map();
????????while(!m->meet())
????????{
????????????m->move();
????????????if(m->seconds>160000l)
????????????{
????????????????m->seconds?=?-1;
????????????????break;
????????????}
????????}
????????cout<<m->seconds<<endl;
????}
????return?0;
}
Map::Map()
{
????char?s[10];
????int?count1,count2;
????for(count1=0;count1<10;count1++)
????{
????????cin>>s;
????????for(count2=0;count2<10;count2++)
????????????Fill(s[count2],count1,count2);
????}
????seconds?=?0;
????Cat.d?=?Mouse.d?=?North;
}
int?Map::meet()
{return?(Cat.x==Mouse.x?&&?Cat.y==Mouse.y);}
void?Map::Fill(char?s,int?x,int?y)
{
????switch(s)
????{
????case?'*':?item[x][y]=0;break;
????case?'.':?item[x][y]=1;break;
????case?'C':?item[x][y]=1;Cat.x=x,Cat.y=y;break;
????case?'M':?item[x][y]=1;Mouse.x=x,Mouse.y=y;break;
????}
}
void?Map::move()
{
????if(!movable(Cat))?Cat.d=(Direction)((Cat.d+1)%4);
????if(!movable(Mouse))?Mouse.d=(Direction)((Mouse.d+1)%4);
????seconds++;
}
int?Map::movable(Point&?pos)
{
????switch(pos.d)
????{
????case?North:
????????if(0!=pos.x?&&?item[pos.x-1][pos.y]){pos.x--;return?1;}
????????break;
????case?East:
????????if(9!=pos.y?&&?item[pos.x][pos.y+1]){pos.y++;return?1;}
????????break;
????case?South:
????????if(9!=pos.x?&&?item[pos.x+1][pos.y]){pos.x++;return?1;}
????????break;
????case?West:
????????if(0!=pos.y?&&?item[pos.x][pos.y-1]){pos.y--;return?1;}
????????break;
????}
????return?0;
}
轉(zhuǎn)載于:https://www.cnblogs.com/FancyMouse/articles/243178.html
總結(jié)
- 上一篇: HERP和单臂路由结合配置时,提示 %I
- 下一篇: 晶体三极管工作原理讲解方法探讨