4 solutions
-
-1
#include<bits/stdc++.h> using namespace std; int dx[]={-1,1,0,0}; int dy[]={0,0,-1,1}; int bfs(string s) { queue<string> q; map<string,int> dist; q.push(s); dist[s]=0; string es="12345678x"; while(q.size()) { string t=q.front(); q.pop(); if(t==es) { return dist[es]; } int k=t.find('x'); int x=k/3,y=k%3; for(int i=0;i<4;i++) { int a=x+dx[i],b=y+dy[i]; if(a<0||a>=3||b<0||b>=3) { continue; } string str=t; int kk=a*3+b; swap(str[kk],str[k]); if(dist.count(str)==0) { dist[str]=dist[t]+1; q.push(str); } } } return -1; } int main() { string s; for(int i=0;i<9;i++) { char ch; cin>>ch; s=s+ch; } cout<<bfs(s); return 0; }
-
-1
#include<bits/stdc++.h> using namespace std; int dx[]={-1,1,0,0}; int dy[]={0,0,-1,1}; int bfs(string s) { queue<string> q; map<string,int> dist; q.push(s); dist[s]=0; string es="12345678x"; while(q.size()) { string t=q.front(); q.pop(); if(t==es) { return dist[es]; } int k=t.find('x'); int x=k/3,y=k%3; for(int i=0;i<4;i++) { int a=x+dx[i],b=y+dy[i]; if(a<0||a>=3||b<0||b>=3) { continue; } string str=t; int kk=a*3+b; swap(str[kk],str[k]); if(dist.count(str)==0) { dist[str]=dist[t]+1; q.push(str); } } } return -1; } int main() { string s; for(int i=0;i<9;i++) { char ch; cin>>ch; s=s+ch; } cout<<bfs(s); return 0; }
-
-3
#include<bits/stdc++.h> using namespace std; int dx[]={-1,1,0,0}; //上下左右 int dy[]={0,0,-1,1}; int bfs(string s) { queue<string> q; map<string,int> dist; q.push(s); dist[s]=0; string es="12345678x"; while(q.size()) { string t=q.front(); q.pop(); if(t==es) return dist[es]; //找到终点 int k=t.find('x'); //寻找'x'的位置; int x=k/3,y=k%3; //映射 for(int i=0;i<4;i++) { int a=x+dx[i],b=y+dy[i]; if(a<0||a>=3||b<0||b>=3) continue; string str=t; int kk=a*3+b; swap(str[kk],str[k]); if(dist.count(str)==0) { dist[str]=dist[t]+1; q.push(str); } } } return -1; //走到不 } int main() { string s; for(int i=0;i<9;i++) { char ch; cin>>ch; s=s+ch; } cout<<bfs(s); return 0; }
-
-4
#include<bits/stdc++.h> using namespace std; int dx[]={-1,1,0,0}; //ÉÏÏÂ×óÓÒ int dy[]={0 ,0,-1,1}; int bfs(string s) { queue<string> q; map<string, int> dist; q.push(s); dist[s]=0; string es= "12345678x"; while (q.size()) { string t=q.front(); q.pop(); if (t==es) return dist[es]; //ÕÒµ½ÖÕµã int k=t.find('x'); //ѰÕÒ'x'µÄλÖã» int x=k/3,y=k%3; //Ó³Éä for(int i=0;i<4;i++) { int a=x+dx[i],b=y+dy[i]; if(a<0|| a>=3||b<0||b>=3) continue; string str=t; int kk=a*3+b; swap(str[kk],str[k]); if(dist.count( str)==0) { dist[str]=dist[t]+1; q.push (str); } } } return -1; //×ßµ½²» } int main() { string s; for (int i=0; i<9;i++) { char ch; cin>> ch; s=s+ch; } cout<<bfs(s); return 0; }
- 1
Information
- ID
- 223
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- # Submissions
- 56
- Accepted
- 11
- Uploaded By