这个题是啥思路啊?

要生成一个8位的数值序列
1 2 3      每一个数字相邻的数字只能是其上下左右的数
4 5 6      如:1旁边只能是2,4;2旁边只能是1,3,5
7 8 9      要找出所有可能的序列,使用寿命算法,思路是怎样的?
全部评论
 这个图应该好看一点,我现在还没想到怎样写算法
点赞 回复 分享
发布于 2015-04-29 21:37
DFS 思路吧?
点赞 回复 分享
发布于 2015-05-01 14:59
#include <iostream> using namespace std; int used[10] = {0}; char pOut[20]; int num = 0; //深度优先搜索,根据当前位置的值,来决定下一步搜索的范围值 //cur当前位置 //value当前位置的值 void dfs(int cur, int value) {     pOut[cur] = value + '0';     //递归出口     if(cur == 8)     {         pOut[cur+1] = '\0';         for(int i = 0; pOut[i] != '\0'; i++)         {             cout<<pOut[i];         }         cout<<endl;         num++;         return;     }     for(int j = 1; j <= 9; j++)     {         switch(value)         {         case 1:             if(j == 2 || j == 4)             {                 if(!used[j])                 {                     used[j] = 1;                     dfs(cur+1,j);                     used[j] = 0;                 }             }             break;         case 2:             if(j == 1 || j == 3 || j == 5)             {                 if(!used[j])                 {                     used[j] = 1;                     dfs(cur+1,j);                     used[j] = 0;                 }             }             break;         case 3:             if(j == 2 || j == 6)             {                 if(!used[j])                 {                     used[j] = 1;                     dfs(cur+1,j);                     used[j] = 0;                 }             }             break;         case 4:             if(j == 1 || j == 5 || j == 7)             {                 if(!used[j])                 {                     used[j] = 1;                     dfs(cur+1,j);                     used[j] = 0;                 }             }             break;         case 5:             if(j == 2 || j == 4 || j == 6 || j == 8)             {                 if(!used[j])                 {                     used[j] = 1;                     dfs(cur+1,j);                     used[j] = 0;                 }             }             break;         case 6:             if(j == 3 || j == 5 || j == 9)             {                 if(!used[j])                 {                     used[j] = 1;                     dfs(cur+1,j);                     used[j] = 0;                 }             }             break;         case 7:             if(j == 4 || j == 8)             {                 if(!used[j])                 {                     used[j] = 1;                     dfs(cur+1,j);                     used[j] = 0;                 }             }             break;         case 8:             if(j == 5 || j == 7 || j == 9)             {                 if(!used[j])                 {                     used[j] = 1;                     dfs(cur+1,j);                     used[j] = 0;                 }             }             break;         case 9:             if(j == 6 || j == 8)             {                 if(!used[j])                 {                     used[j] = 1;                     dfs(cur+1,j);                     used[j] = 0;                 }             }             break;         default:             break;         }     } } int main() {     for(int i = 1; i <= 9; i++)     {         used[i] = 1;         dfs(0,i);         used[i] = 0;     }     cout<<num<<endl;     return 0; }
点赞 回复 分享
发布于 2015-04-25 11:07
来人,求助,解决这题用啥算法啊?
点赞 回复 分享
发布于 2015-04-23 12:28
比如 123698745,125478963。。。 就是说相邻两个数字必须在你给出的这个矩阵的4邻域内,就满足要求
点赞 回复 分享
发布于 2015-04-23 11:26

相关推荐

06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务