4 solutions

  • -1
    @ 2024-11-18 19:06:06
    #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
      @ 2024-7-19 9:45:50
      #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
        @ 2024-7-10 11:37:22
        #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
          @ 2024-7-10 11:42:33
          #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