标签:while inpu 左右 scanf ace front 魔兽 int for
题目
1 #include<bits/stdc++.h> 2 #include<cstdio> 3 #include<queue> 4 using namespace std; 5 int n,m; 6 char ss[101]; 7 bool flag[101][101]; 8 int v[101][101]; 9 int a[101][101]; 10 int fx[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; 11 int x,y; 12 int ans=1e9; 13 void bfs() 14 { 15 memset(v,0x7f,sizeof(v)); 16 v[1][1]=0; 17 x=1; 18 y=1; 19 int s1,s2; 20 queue<int> q; 21 q.push(x); 22 q.push(y); 23 while (!q.empty()) 24 { 25 s1=q.front(); 26 q.pop(); 27 s2=q.front(); 28 q.pop(); 29 int k=v[s1][s2]+1; 30 for (int i=0;i<4;i++) 31 { 32 if (a[s1+fx[i][0]][s2+fx[i][1]]==1&&s1+fx[i][0]<1&&s1+fx[i][0]>n&&s2+fx[i][1]<1&&s2+fx[i][1]>m) continue; 33 if (a[s1+fx[i][0]][s2+fx[i][1]]>9&&flag[s1+fx[i][0]][s2+fx[i][1]]==0) 34 { 35 flag[s1+fx[i][0]][s2+fx[i][1]]=1; 36 for (int ii=1;ii<=n;ii++) 37 for (int jj=1;jj<=m;jj++) 38 if (a[s1+fx[i][0]][s2+fx[i][1]]==a[ii][jj]&&(ii!=s1+fx[i][0]||jj!=s2+fx[i][1])) 39 { 40 v[ii][jj]=min(k,v[ii][jj]); 41 q.push(ii); 42 q.push(jj); 43 } 44 } 45 else if (v[s1+fx[i][0]][s2+fx[i][1]]==2139062143&&a[s1+fx[i][0]][s2+fx[i][1]]==0&&s1+fx[i][0]>=1&&s1+fx[i][0]<=n&&s2+fx[i][1]>=1&&s2+fx[i][1]<=m) 46 { 47 if (s1+fx[i][0]==n&&s2+fx[i][1]==m) 48 ans=min(k,ans); 49 q.push(s1+fx[i][0]); 50 q.push(s2+fx[i][1]); 51 v[s1+fx[i][0]][s2+fx[i][1]]=min(k,v[s1+fx[i][0]][s2+fx[i][1]]); 52 } 53 if (s1+fx[i][0]==n&&s2+fx[i][1]==m) 54 ans=min(k,ans); 55 } 56 } 57 } 58 int main () 59 { 60 cin>>n>>m; 61 for (int i=1;i<=n;i++) 62 { 63 scanf("%s",ss+1); 64 for (int j=1;j<=m;j++) 65 a[i][j]=ss[j]-48; 66 } 67 bfs(); 68 if (ans!=1e9) 69 cout<<ans; 70 else 71 cout<<"No Solution."; 72 }
标签:while inpu 左右 scanf ace front 魔兽 int for
原文地址:https://www.cnblogs.com/zjzjzj/p/9692596.html