首页 > 代码库 > Problem E: Erratic Ants

Problem E: Erratic Ants

这个题没过……!
题意:小蚂蚁向四周走,让你在他走过的路中寻找最短路,其中可以反向
主要思路:建立想对应的图,寻找最短路径,其中错了好多次,到最后时间没过(1.没有考录反向2.没有考虑走过的路要标记……!!!!!内存超了……啊啊啊啊!!!!)
总之,这样了~~

技术分享
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <map>#include <cmath>#include <cstring>#include <string>#include <queue>#include <stack>#include <cctype>const double Pi = atan(1) * 4;using namespace std;int graph[200][200];bool through[100][100];int dr[] = {1,-1,0,0};int dc[] = {0,0,-1,1};bool visit[200][200];struct Point{    int x,y;    int step;    Point(){        step = 0;    }    Point(int xx,int yy,int tt):x(xx),y(yy),step(tt){}};int main(){    freopen("input.in","r",stdin);    //freopen("output.in","w",stdout);    int t;    cin >> t;    queue<Point>que;    while(t--){        int n;        cin >> n;        memset(graph,0,sizeof(graph));        memset(through,0,sizeof(through));        memset(visit,0,sizeof(visit));        int x = 100;        int y = 100;        int sx = 100;        int sy = 100;        graph[x][y] = 1;        char ch;        int ww = n;        while(n--){            cin >> ch;            int xx = x;            int yy = y;            if(ch == E){                xx++;            }            else if(ch == W){                xx--;            }            else if(ch == S){                yy--;            }            else if(ch == N){                yy++;            }            if(!graph[xx][yy])                graph[xx][yy] = graph[x][y]+1;            through[ graph[x][y] ][graph[xx][yy] ] = 1;            through[ graph[xx][yy] ][graph[x][y] ] = 1;            x = xx;            y = yy;        }        if(ww == 1){            cout << "1" << endl;            continue;        }        while(!que.empty()){            que.pop();        }        Point head(sx,sy,0);        que.push(head);        visit[sx][sy] = 1;        while(!que.empty()){            Point tmp = que.front();            que.pop();            if(tmp.x == x && tmp.y == y){                cout << tmp.step << endl;                break;            }            for(int i = 0;i < 4;i++){                int xx = tmp.x + dr[i];                int yy = tmp.y + dc[i];                if(graph[xx][yy] != 0 && through[  graph[tmp.x][tmp.y] ][ graph[xx][yy] ] && !visit[xx][yy]){                    Point tt(xx,yy,tmp.step+1);                    que.push(tt);                    visit[xx][yy] = 1;                }            }        }    }    return 0;}
View Code

 

Problem E: Erratic Ants