POJ 3126 Prime Path
2015-05-17 21:40
246 查看
我查了一下,很多人都把它当成第二道BFS题啊,非常高兴能遇到一个适合我现阶段水平的题
题意是输入两个四位数字,改动第一个数的某一位算作一步,求将第一个数字转化为第二个数字最少需要多少步
思路还是很清楚的,一位一位的改,每改一位将改动过的数字存到队列中。
题意是输入两个四位数字,改动第一个数的某一位算作一步,求将第一个数字转化为第二个数字最少需要多少步
思路还是很清楚的,一位一位的改,每改一位将改动过的数字存到队列中。
#include<stdio.h> #include<math.h> #include<string.h> struct A{ int number; int step; }queue[10000]; int vis[10000]; int first, last; int isprime( int m); int bfs( int start); int main(void){ int n; scanf("%d", &n); while(n--){ scanf("%d%d", &first, &last); memset( vis, 0, sizeof(vis)); bfs(first); } return 0; } int bfs( int start){ int head, rear, i, k; struct A temp; int ge, shi, bai, qian; head = rear = 0; vis[start] = 1; queue[rear].number = start; queue[rear].step = 0; rear++; while( head < rear){ temp.step = queue[head].step; temp.number = queue[head++].number; if( temp.number == last){ printf("%d\n", temp.step ); return; } ge = temp.number % 10; shi = temp.number / 10 % 10; bai = temp.number % 1000 / 100; qian = temp.number / 1000; // 改个位 for( i = 1; i <= 9; i += 2){ k = temp.number / 10 * 10 + i; if( isprime(k) && !vis[k]){ vis[k] = 1; queue[rear].number = k; queue[rear++].step = temp.step + 1; } } // 改十位 for( i = 0; i <= 9; i++){ k = temp.number / 100 * 100 + i * 10 + ge; if( !vis[k] && isprime(k)){ vis[k] = 1; queue[rear].number = k; queue[rear++].step = temp.step + 1; } } // 改百位 for( i = 0; i <= 9; i++){ k = temp.number / 1000 * 1000 + i * 100 + shi * 10 + ge; if( !vis[k] && isprime(k)){ vis[k] = 1; queue[rear].number = k; queue[rear++].step = temp.step + 1; } } // 改千位 for( i = 1; i <= 9; i++){ k = i * 1000 + bai * 100 + shi * 10 + ge; if( !vis[k] && isprime(k)){ vis[k] = 1; queue[rear].number = k; queue[rear++].step = temp.step + 1; } } } printf("Impossible\n"); return ; } int isprime( int m){ int temp, i; temp = sqrt(m); for( i = 2; i <= temp; i++){ if( m % i == 0) return 0; } return 1; }
相关文章推荐
- Prime Path (poj 3126 bfs)
- POJ - 3126 Prime Path —— BFS
- CD0J/POJ 851/3126 方老师与素数/Prime Path BFS
- POJ 3126 Prime Path BFS
- POJ 3126 - Prime Path
- POJ - 3126 Prime Path(BFS)
- POJ 3126 Prime Path
- poj 3126 prime path
- POJ 3126 Prime Path
- poj 3126 Prime Path( bfs + 素数)
- POJ 3126 Prime Path(经典广搜BFS)
- Prime Path(POJ 3126 BFS)
- POJ 3126 Prime Path
- POJ - 3126 D - Prime Path(bfs)
- POJ 3126 Prime Path BFS
- POJ 3126 Prime Path(BFS 数字处理)
- POJ-3126 Prime Path (BFS)
- POJ 3126 Prime Path
- POJ 3126 Prime Path 素数筛,bfs
- Poj 3126 Prime Path