1034

来源:互联网 发布:资本运作软件 编辑:程序博客网 时间:2024/05/29 18:55
#include<stdio.h> #include<iostream> using namespace std; #define DEBUG_IO (0) #define DEBUG (0)   struct Node {     int x;      int y;     int s;     Node():x(0),y(0),s(0)     {     } };   const int N = 1001; const int dis[4][2] = {{1, 0},{0, 1},{-1, 0},{0, -1}};   const int MAXQ = 100000; Node Q0[MAXQ]; Node Q1[MAXQ]; char map[N][N]; bool vis[N][N]; int front0 = 0; int rear0 = 1; int front1 = 0; int rear1 = 0; int x = 0; int y = 0; int s = 0; int n; bool isOver = false;   void bfs0(); void bfs1();   int main() { #if DEBUG      freopen("input.txt", "r", stdin);      setbuf(stdout, NULL);  #endif     int i, j, k;     scanf("%d", &n);       for(i = 0; i < n; i++)     {         for(j = 0; j < n; j++)         {             scanf("%d", &map[i][j]);             vis[i][j] = 0;         }     }     isOver = false;     vis[0][0] = 1;     while(front0 != rear0 || front1 != rear1)     {         if(isOver)         {             break;         }         if(front0 != rear0)         {             bfs0();         }         else if(front1 != rear1)         {             bfs1();         }     }     printf("%d", Q0[front0].s);     return 0; }   void bfs0() {             x = Q0[front0].x;             y = Q0[front0].y;             s = Q0[front0].s; #if DEBUG_IO              cout <<"De Q0:"<<"("<<x<<","<<y<<","<<s<<") "; #endif             if(x == n-1 && y == n-1)             {                 isOver = true;                 return;             }             for(int i = 0; i < 4; i++)             {                 x += dis[i][0];                 y += dis[i][1];                 if(x >= 0 && x < n && y >=0 && y < n && vis[x][y] == 0)                 {                     vis[x][y] = 1;                     if(map[x][y] == 0)                     {                         //vis[x][y] = 1;                         Q0[rear0].x = x;                         Q0[rear0].y = y;                         Q0[rear0].s = s; #if DEBUG_IO                          cout <<"En Q0:"<<"("<<x<<","<<y<<","<<s<<") "; #endif                         rear0++;                         rear0=(rear0)%MAXQ;                     }                     else                    {                         Q1[rear1].x = x;                         Q1[rear1].y = y;                         Q1[rear1].s = s + 1; #if DEBUG_IO                          cout <<"En Q1:"<<"("<<x<<","<<y<<","<<s + 1<<") "; #endif                         rear1++;                         rear1=(rear1)%MAXQ;                     }                 }                 x -= dis[i][0];                 y -= dis[i][1];             }             front0++;             front0=(front0)%MAXQ; #if DEBUG_IO             cout<<endl; #endif }   void bfs1() {             x = Q1[front1].x;             y = Q1[front1].y;             s = Q1[front1].s; #if DEBUG_IO              cout <<"De Q1:"<<"("<<x<<","<<y<<","<<s<<") "; #endif             if(x == n-1 && y == n-1)             {                 isOver = true;                 return;             }             for(int i = 0; i < 4; i++)             {                 x += dis[i][0];                 y += dis[i][1];                 if(x >= 0 && x < n && y >=0 && y < n && vis[x][y] == 0)                 {                     vis[x][y] = 1;                     if(map[x][y] == 1)                     {                         Q1[rear1].x = x;                         Q1[rear1].y = y;                         Q1[rear1].s = s + 1; #if DEBUG_IO                          cout <<"En Q1:"<<"("<<x<<","<<y<<","<<s+1<<") "; #endif                         rear1++;                         rear1=(rear1)%MAXQ;                     }                     else                    {                         Q0[rear0].x = x;                         Q0[rear0].y = y;                         Q0[rear0].s = s; #if DEBUG_IO                          cout <<"En Q0:"<<"("<<x<<","<<y<<","<<s<<") "; #endif                         rear0++;                         rear0=(rear0)%MAXQ;                     }                 }                 x -= dis[i][0];                 y -= dis[i][1];             }             front1++;             front1=(front1)%MAXQ; #if DEBUG_IO             cout<<endl; #endif   } /**************************************************************     Problem: 1034     User: ddddd     Language: C++     Result: 正确     Time:320 ms     Memory:4792 kb ****************************************************************/

0 0
原创粉丝点击