首页 > 代码库 > [kuangbin带你飞]专题一 简单搜索 - N - Find a way
[kuangbin带你飞]专题一 简单搜索 - N - Find a way
正确代码:
1 #include<iostream> 2 #include<queue> 3 #define N 210 4 #define inf 0xffffff 5 using namespace std; 6 int m,n,mark[N][N],dis[N][N][2],dir[4][2]={1,0, 0,1, -1,0, 0,-1},flag; 7 char s[N][N]; 8 struct node{ 9 int x,y,step;10 };11 bool judge(int x,int y)12 {13 if(x>=0 && x<m && y>=0 && y<n && s[x][y]!=‘#‘ && mark[x][y]==0)14 return 1;15 return 0;16 }17 void bfs(int x,int y)18 {19 int k;20 queue<node>q;21 node cur,next;22 cur.x=x;cur.y=y;cur.step=0;23 mark[x][y]=1;24 q.push(cur);25 while(!q.empty())26 {27 cur=q.front();28 q.pop();29 next.step=cur.step+1;30 for(k=0;k<4;k++)31 {32 next.x=x=cur.x+dir[k][0];33 next.y=y=cur.y+dir[k][1];34 if(judge(x,y))35 {36 mark[x][y]=1;37 if(s[x][y]==‘@‘)38 dis[x][y][flag]=next.step;39 q.push(next);40 }41 }42 }43 }44 45 int main()46 {47 int i,j,min;48 while(scanf("%d %d",&m,&n)!=-1)49 {50 min=inf;51 for(i=0;i<m;i++)52 for(j=0;j<n;j++)53 dis[i][j][0]=dis[i][j][1]=inf;54 55 for(i=0;i<m;i++)56 scanf("%s",s[i]);57 for(i=0;i<m;i++)58 for(j=0;j<n;j++)59 {60 if(s[i][j]==‘Y‘)61 {62 flag=0;63 memset(mark,0,sizeof(mark));64 bfs(i,j);65 }66 else if(s[i][j]==‘M‘)67 {68 flag=1;69 memset(mark,0,sizeof(mark));70 bfs(i,j);71 }72 }73 for(i=0;i<m;i++)74 for(j=0;j<n;j++)75 if(s[i][j]==‘@‘ && min>dis[i][j][0]+dis[i][j][1])76 min=dis[i][j][0]+dis[i][j][1];77 printf("%d\n",min*11);78 }79 return 0;80 }
被逼疯代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<queue> 6 #define INF 0x3f3f3f3f 7 using namespace std; 8 struct node 9 { 10 int x; 11 int y; 12 int step; 13 }; 14 char g[205][205]; 15 int stepA[205][205]; 16 int stepB[205][205]; 17 queue<node>q; 18 int yx, yy, mx, my; 19 int x, y; 20 long long ans; 21 int d[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; 22 23 int main() 24 { 25 // freopen("in.in","r",stdin); 26 // freopen("out.txt","w",stdout); 27 while(scanf("%d%d",&x,&y)!=EOF) 28 { 29 memset(g,0,sizeof(g)); 30 memset(stepA,-1,sizeof(stepA)); 31 memset(stepB,-1,sizeof(stepB)); 32 char tmp[205]; 33 for(int i = 1; i <= x; i++) 34 { 35 scanf("%s",tmp); 36 for(int j = 1; j <= y; j++) 37 { 38 if(tmp[j-1]==‘Y‘) 39 { 40 yx = i; 41 yy = j; 42 } 43 if(tmp[j-1]==‘M‘) 44 { 45 mx = i; 46 my = j; 47 } 48 g[i][j] = tmp[j-1]; 49 } 50 } 51 ans = INF; 52 53 node s, t; 54 55 s.x = yx; 56 s.y = yy; 57 s.step = 0; 58 q.push(s); 59 while(q.size()) 60 { 61 s = q.front(); 62 q.pop(); 63 stepA[s.x][s.y] = s.step; 64 for(int i = 0; i < 4; i++) 65 { 66 t.x = s.x + d[i][0]; 67 t.y = s.y + d[i][1]; 68 t.step = s.step + 1; 69 if(stepA[t.x][t.y] != -1) continue; 70 if(g[t.x][t.y]==‘.‘|| g[t.x][t.y]==‘@‘) 71 q.push(t); 72 } 73 } 74 s.x = mx; 75 s.y = my; 76 s.step = 0; 77 q.push(s); 78 while(q.size()) 79 { 80 s = q.front(); 81 q.pop(); 82 stepB[s.x][s.y] = s.step; 83 for(int i = 0; i < 4; i++) 84 { 85 t.x = s.x + d[i][0]; 86 t.y = s.y + d[i][1]; 87 t.step = s.step + 1; 88 if(stepB[t.x][t.y] != -1) continue; 89 if(g[t.x][t.y]==‘.‘|| g[t.x][t.y]==‘@‘) 90 q.push(t); 91 } 92 } 93 for(int i = 1; i <= x; i++) 94 { 95 for(int j = 1; j <= y; j++) 96 { 97 if(g[i][j]==‘@‘ && stepA[i][j]+stepB[i][j]<ans && stepA[i][j]!=-1 && stepB[i][j]!=-1) 98 ans = stepA[i][j]+stepB[i][j]; 99 } 100 }101 cout<<ans*11<<endl;102 }103 104 return 0;105 }
[kuangbin带你飞]专题一 简单搜索 - N - Find a way
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。